JP4806158B2 - マークアップ内でサブクラスを宣言的に定義し、使用するためのシステムおよび方法 - Google Patents

マークアップ内でサブクラスを宣言的に定義し、使用するためのシステムおよび方法 Download PDF

Info

Publication number
JP4806158B2
JP4806158B2 JP2003141202A JP2003141202A JP4806158B2 JP 4806158 B2 JP4806158 B2 JP 4806158B2 JP 2003141202 A JP2003141202 A JP 2003141202A JP 2003141202 A JP2003141202 A JP 2003141202A JP 4806158 B2 JP4806158 B2 JP 4806158B2
Authority
JP
Japan
Prior art keywords
subclass
assembly
computer
markup
definition
Prior art date
Legal status (The legal status 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 status listed.)
Expired - Fee Related
Application number
JP2003141202A
Other languages
English (en)
Other versions
JP2004265371A (ja
Inventor
ラマニ スンダラム
エー.レリア ロバート
エル.ボグダン ジェフリー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2004265371A publication Critical patent/JP2004265371A/ja
Application granted granted Critical
Publication of JP4806158B2 publication Critical patent/JP4806158B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • 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]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/4492Inheritance
    • 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
    • G06F9/453Help systems
    • 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
    • G06F9/454Multi-language systems; Localisation; Internationalisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Human Computer Interaction (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Error Detection And Correction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、マークアップ内でサブクラスを宣言的に定義し、拡張し、使用するためのシステムおよび方法に関し、マークアップ言語を使用してコンポーネントを作成し、拡張し、使用するためのメカニズムを提供するものである。
今日、ソフトウェア開発ツールにより、ソフトウェア開発者は、C、C++、C#などのプログラミング言語(programming language)を使用して実行可能なコンポーネントを作成することができるようになっている。実行可能なコンポーネントを作成することの1つの利点は、コンポーネントは、作成されると、その他のソフトウェアプログラムによって再利用されることが可能なことである。実行可能なコンポーネントを作成することの別の利点は、新しいコンポーネントを既存のコンポーネントから容易に拡張可能なことである。
一般に、コンポーネントはサブクラス化によって拡張され、サブクラス化とは、新しいクラスを既存のクラスから導出することを意味する。このクラスおよびサブクラスは、プログラミング言語のどれかを使用して記述される。記述されるコードは、一般にソースコードと呼ばれる。従来のランタイム環境の場合、ソフトウェア開発ツールがソースコードをオブジェクトコードにコンパイルした後、複数のオブジェクトコードを一緒にリンクして実行可能コードを生成する。ただし、この従来のランタイム環境が抱える問題の1つは、各プログラミング言語、およびそのプログラミング言語の各バージョンが、異なるランタイム環境を必要とすることである。
この問題を克服するため、新しいタイプのランタイム環境が、従来のランタイム環境の言語間インターフェース問題および言語バージョン問題の多くを実質的に解消するように設計されている。この新しいタイプのランタイム環境では、開発ツールがソースコードを中間言語にコンパイルする。ランタイム中、ランタイム環境が、その中間言語をネイティブバイナリ実行可能コードにコンパイルする。したがって、新しいランタイム環境は、ランタイム中に「リンクタイプ」のプロセスを行う。この「リンクタイプ」のプロセスを行うため、ランタイム環境は、情報(例えば、メタデータ)を読み取り、実行されているプログラムに関連するコンポーネントに関するILアセンブリにアクセスする。メタデータは、タイプ、バージョン、リソース等に関する記述を含む。ILアセンブリは、単一のダイナミックリンクライブラリ(DLL)であること、または多数のDLLおよびリソースであることが可能である。
従来のタイプのランタイム環境と新しいタイプのランタイム環境の両方の場合で、ソースコードは、プログラミング言語を使用して記述される。各プログラミング言語は、自らの固有のシンタックス、およびランタイム環境に特有の1組のアプリケーションプログラミングインターフェース(API)を有する。ソフトウェア開発者は、ソースコードを記述するのに、プログラミング言語のシンタックス、およびランタイム環境に関連するAPIを習得しなければならない。シンタックスおよびAPIを習得することには、非常に時間がかかり、困難が伴う。さらに、開発者が複数のプログラミング言語および/または様々なランタイム環境を使用してプログラミングすることを望む場合、その開発者は、プログラミング言語のシンタックスのそれぞれ、および様々なランタイム環境に対するAPIの間の類似性および微妙な違いを覚えていなければならない。
コンポーネントを使用することの利点から、コンポーネントを作成し、拡張し、使用するためのよりよいメカニズムの必要性が存在する。
本発明は、マークアップ内でサブクラスを宣言的に定義し、拡張し、使用するためのシステムおよび方法を対象とする。本発明は、開発者がマークアップ言語を使用してコンポーネントを作成し、拡張し、使用するためのメカニズムを提供する。このコンポーネントには、再利用可能なコンポーネント、アプリケーションユーザインターフェース、ドキュメントユーザインターフェース等が含まれる。このメカニズムは、開発者がプログラミング言語を知っていることを必要としない。代わりに、このメカニズムは、開発者がXML(拡張可能なマークアップ言語)などの慣れ親しんだマークアップ言語を使用してコンポーネントを作成することを可能にする。XMLは、習得するのがはるかに容易であり、一般のコンピュータプログラマの間でより普及してきているため、本発明は、従来のプログラミング言語を使用することに優るいくつかの利点を提供する。1つの利点は、コンポーネントをマークアップドキュメント内、並びに他のマークアップテキスト内で定義して、非常に洗練された電子ドキュメントを作成可能なことである。別の利点は、開発者が実行可能なコンポーネントを生成するのに全くプログラミング言語を知ったり、または理解する必要がないことである。
本発明のシステム、方法、およびデータ構造により、マークアップドキュメント内に記述されたサブクラス定義から、サブクラスに関連する実行可能なアセンブリを生成することができるようになる。本発明によれば、サブクラス定義は、スキーマに基づいて記述される。このスキーマは、XMLベースのものであることが可能である。スキーマは、サブクラスの名前を定義するためのサブクラスタグを含む。名前は、実行可能なアセンブリが実行されたときにインスタンス化されるオブジェクトのタイプに関連する。スキーマは、サブクラス定義をコンパイルするプログラミング言語(programming language)を指定するため、サブクラスがそこから導出されるスーパークラスを指定するため、オブジェクトがインスタンス化されたときに行われるアクションを指定するため、サブクラスに関するEvent定義、および関連するEventHandlerを生成するため、並びにオブジェクトがインスタンス化されるとそのオブジェクト内のフィールドとなるプロパティを指定するためなどのヒントをさらに含む。
本発明は、マークアップドキュメント内でサブクラスを宣言的に定義し、拡張し、使用するためのシステムおよび方法を対象とする。本発明は、開発者がマークアップ言語を使用してコンポーネントを作成し、拡張し、使用するためのメカニズムを提供する。このメカニズムは、開発者がプログラミング言語(programming language)を知っていることを必要としない。代わりに、このメカニズムは、開発者が拡張可能なマークアップ言語(XML)などの慣れ親しんだマークアップ言語を使用してコンポーネントを作成することを可能にする。
例示的なコンピューティング環境
図1は、本発明の例示的な実施例において使用することができる例示的なコンピューティングデバイスを示している。図1を参照すると、非常に基本的な構成において、コンピューティングデバイス100は、通常、少なくとも1つの処理ユニット102およびシステムメモリ104を含む。コンピューティングデバイス100の構成およびタイプが正確にどのようなものであるかに依存して、システムメモリ104は、揮発性(RAMなどの)、不揮発性(ROM、フラッシュメモリなどの)、または揮発性と不揮発性の何らかの組合せであることが可能である。システムメモリ104は、通常、オペレーティングシステム105、1つ以上のプログラムモジュール106を含み、またプログラムデータ107も含むことが可能である。プログラムモジュール106の例には、ブラウザアプリケーション、財務管理アプリケーション、ワードプロセッサ等が含まれる。この基本的な構成を破線108内のコンポーネントで図1に示している。
コンピューティングデバイス100は、追加のメカニズムまたは機能を有することが可能である。例えば、コンピューティングデバイス100は、例えば、磁気ディスク、光ディスク、またはテープなどの追加の(取外し可能な、かつ/または取外し不可能な)データ記憶媒体も含むことが可能である。そのような追加のストレージを図1に取外し可能なストレージ109および取外し不可能なストレージ110で示している。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータなどの情報を記憶するための任意の方法または任意の技術で実装された揮発性の媒体および不揮発性の媒体、取外し可能な媒体および取外し不可能な媒体が含まれることが可能である。システムメモリ104、取外し可能ストレージ109および取外し不可能なストレージ110は全てコンピュータ記憶媒体の例である。コンピュータ記憶媒体には、RAM、ROM、EEPROM、フラッシュメモリまたはその他のメモリ技術、CD−ROM、デジタルバーサタイルディスク(DVD)またはその他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたはその他の磁気記憶媒体、あるいは所望の情報を記憶するのに使用することができ、コンピューティングデバイス100によってアクセスされることが可能な任意の他の媒体が含まれるが、以上には限定されない。任意のそのようなコンピュータ記憶媒体がデバイス100の一部となっていることが可能である。また、コンピューティングデバイス100は、キーボード、マウス、ペン、音声入力装置、タッチ入力装置などの入力装置112も有することが可能である。ディスプレイ、スピーカ、プリンタなどの出力装置114も含めることが可能である。以上のデバイスは、当技術分野で周知であり、本明細書で詳述するまでもない。
また、コンピューティングデバイス100は、デバイス100がネットワークを介するなどして、他のコンピューティングデバイス118と通信することを可能にする通信接続116も含むことが可能である。通信接続116は、通信媒体の一例である。通信媒体は、通常、搬送波、またはその他のトランスポートメカニズムなどの変調されたデータ信号内のコンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータによって実現され、任意の情報配信媒体を含む。「変調されたデータ信号」という用語は、情報を信号内に符号化するような仕方で特性の1つまたは複数が変更されている信号を意味する。例として、限定としてではなく、通信媒体には、有線ネットワークまたは直接配線接続などの有線媒体、並びに音響媒体、RF媒体、赤外線媒体、およびその他のワイアレス媒体などのワイアレス媒体が含まれる。本明細書で使用するコンピュータ可読媒体という用語には、記憶媒体と通信媒体がともに含まれる。
図2は、本発明の一実施例を実施するための開発システムを一般的に示す機能ブロック図である。このシステムは、マークアップコンパイラ(compiler)202およびパーサ(parser)204を含む。マークアップコンパイラ202およびパーサ204は、図1に示したコンピューティングデバイス100などのコンピューティングデバイス上に常駐することが可能なソフトウェアモジュール(すなわち、図1に示したプログラムモジュール106)である。マークアップコンパイラ202は、マークアップドキュメント206を入力する。一実施例では、マークアップドキュメント206は、拡張可能なマークアップ言語(XML)ベースのドキュメントである。簡単に述べると、図4〜図6に示し、以下に詳細に説明するマークアップドキュメント206は、サブクラス定義の部分を示すタグ(図示せず)を含む。後により詳細に説明する通り、このタグは、サブクラスおよび関連するエレメントの存在を示す。このタグに出会うと、マークアップコンパイラ202は、サブクラスを作成するためのパーサ204と通信を始める。
一実施例では、パーサ204によって提供される機能は、マークアップコンパイラ202内で提供されることが可能である。別の実施例では、パーサ204によって提供される機能が、マークアップコンパイラ202内の既存のパーサクラスから構文解析クラスを導出することによって提供されることも可能である。導出された構文解析クラスは、本発明に従って定義されたサブクラストークン(すなわち、タグ)のそれぞれに関する機能指定変更を含むことが可能である。簡単に述べると、図10に示し、後により詳細に説明する機能指定変更は、サブクラスに関連するエレメントの定義の開始および終了を知らせる一連のコールバック機能の一部であることが可能である。
パーサ204は、マークアップドキュメント206内のサブクラス定義を構文解析するように構成されている。簡単に述べると、マークアップコンパイラ202がマークアップドキュメント206内のコンテンツをコンパイルする。一実施例では、マークアップコンパイラ202は、トークン化(tokenized)バイナリファイル208の中に保存されるトークン化バイナリストリームにコンテンツを変換する。トークン化バイナリファイル208は、当分野の技術者に周知のいくつかの形態のどれかであることが可能である。トークン化バイナリファイル208は、マークアップドキュメント206の中で指定されたコンポーネントのツリーを表わす。ただし、マークアップコンパイラ202は、コンテンツの一部を直接に変換することができない可能性があり、そのコンテンツがパーサ204に送られることが可能である。本発明に従ってマークアップドキュメント206内で定義されたサブクラス定義が、そのようなコンテンツの例である。パーサ204が、このサブクラス定義内のプロパティ、イベント等を識別し、これらのアイテムに関する妥当な情報をマークアップコンパイラ202に中継する。
妥当な情報を受け取ると、マークアップコンパイラ202は、そのサブクラス定義に関連するマークアップドキュメント206にトークンを追加する。また、マークアップコンパイラ202は、ILアセンブリ210の生成の元となる代表的なソースコード212も生成する。ILアセンブリ210は、マークアップドキュメント206内で定義されたサブクラス(例えば、コンポーネント)に関するコンピュータ命令を含む。過去には、このILアセンブリは、プログラム言語(programmatic language)を使用して記述されたソースコードをコンパイルし、リンクするソフトウェア開発ツールを使用して生成された。また、マークアップコンパイラ202がトークン化バイナリファイル208を生成することなしにILアセンブリ210を生成することが可能な別の実施例を実施可能なことも、当分野の技術者には認められよう。
マークアップコンパイラ202によって生成されたILアセンブリ210は、従来のプログラミング開発ツールによって再利用されることが可能である。さらに、ILアセンブリ210は、他のマークアップドキュメントの中で再利用されることも可能である。マークアップドキュメント内でILアセンブリ210を再利用できることを図7に例示し、それに併せて説明している。したがって、本発明は、コンポーネント開発者がマークアップ言語を使用してコンポーネントを容易に作成し、拡張することができるようにする。本発明に従って新しいコンポーネントが作成されると、その新しいコンポーネントは、あたかも従来のプログラミング言語を使用して作成されたかのように見える。したがって、本発明のメカニズムおよび方法を使用する開発者は、プログラミング言語のシンタックスおよび微妙な違いを習得せずに、コンポーネントを作成することができる。
図3は、本発明の一実施例を実施するためのランタイム環境を一般的に示す機能ブロック図である。このランタイム環境は、ランタイムエンジン302、トークン化バイナリリーダ304、およびトークン化バイナリローダ306を含む。ランタイムエンジン302は、特定のリソース(例えば、図2に示すマークアップドキュメント206)をロードする要求を受け取ったとき、ページマップテーブル308にアクセスする。ページマップテーブル308は、マークアップドキュメント206がコンパイル済みのバージョン(例えば、トークン化バイナリファイル208)を有するか否かを明らかにする。コンパイル済みのバージョンが存在する場合、ランタイムエンジン302は、トークン化バイナリローダ306と通信してトークン化バイナリファイル208をロードする。一実施例では、トークン化バイナリファイル208は、そのトークン化バイナリファイル208に関連するILアセンブリ(例えば、ILアセンブリ210)を特定する。次に、トークン化バイナリローダ306は、特定されたILアセンブリ210をロードする。トークン化バイナリファイル208の一部または全部、および関連するILアセンブリ210がロードされると、トークン化バイナリリーダ304が、トークン化バイナリファイル208を読み取ることを始め、またILアセンブリ210が、プロセッサ(例えば、図1に示す処理ユニット102)上で実行されるネイティブ命令を生成することを始める。トークン化バイナリリーダ304は、メタデータ310にアクセスして、タイプ、メソッド、およびイベントなどの情報を判別することができる。一般に、メタデータ310は、メソッド、フィールド、プロパティ、およびイベントに関する情報を含む。以上のアイテムのそれぞれは、さらなる詳細のために読み取られることが可能な独自のメタデータを有することが可能である。したがって、メタデータ310を使用して、トークン化バイナリリーダ304は、ランタイム中に反映(reflection)を使用して、トークン化バイナリファイル208内のエレメントに関する情報をプログラミング式に判別する。さらに、後に以下により詳細に説明する通り、マークアップドキュメント206内で最初に定義されたサブクラスが、本発明に従って生成されたILアセンブリ210を使用して直接に実行されることが可能である。
図4〜図6は、本発明の一実施例によるサブクラスを宣言的に定義するための例示的なシンタックスを示すマークアップドキュメント206内のマークアップの一連の主立った部分を示している。図10は、マークアップコンパイラ202が、図4〜図6に示されたマークアップの主立った部分に基づいて生成することができる代表的なソースコードを示す例示的なソースコードリストである。一実施例では、マークアップコンパイラ202は、代表的なソースコードを含むファイルを実際に生成することが可能である。これは、開発者がデバッグフラグを設定したときに行われることが可能である。その場合、代表的なソースコードを含むファイルにより、開発者は、マークアップドキュメント206の中のテキスト内の問題の可能性、またはマークアップコンパイラ202内の問題を判別することができるようになる。代表的なコードがファイル内に保存されない別の実施例を実施することも可能である。この実施例の場合、マークアップコンパイラ202は、代表的なソースコードをまず生成して、または生成することなしに、トークン化バイナリファイル208およびILアセンブリ210を生成することができる。
概観すると、一連の図4〜図6は、本発明によるマークアップ内でサブクラスを宣言的に定義するための様々な態様を漸進的に描いている。図4は、サブクラス、およびサブクラス階層を定義するための例示的なシンタックスを示している。図5は、サブクラスに関する識別子、コード、およびコンストラクタ(constructor)を定義するための例示的なシンタックスを示している。図6は、サブクラスに関するプロパティおよびイベントを定義するための例示的なシンタックスを示している。次に、以上の図のそれぞれをより詳細に説明する。
図4は、サブクラス、およびサブクラス階層を定義するための例示的なシンタックスを示している。マークアップ400の主立った部分(例えば、サブクラス定義)は、スーパークラスタグ402(例えば、「Button」)を含む。以下の考察では、各タグ(例えば、スーパークラスタグ402)が、対応する終了タグを有する。便宜上、終了タグについては、記載する説明では明示的に述べず、関連する図に示している。マークアップ400は、ネームスペース(namespace)属性404、定義ネームスペース宣言406、およびいくつかのコンパイラヒント(例えば、ヒント408および410)を含む。ネームスペース属性404は、スーパークラス(例えば、Button)が配置されているネームスペース(例えば、「System.Control」)およびアセンブリを特定する。定義ネームスペース宣言406は、「def:」プレフィクスを含むマークアップ400内のあらゆる属性が、コンパイラが行う必要があるアクションに関するコンパイラに対するヒントを表わすことを示す。
例えば、ヒント408(以降、言語ヒント408と呼ぶ)は、言語ヒント408に割り当てられた言語(例えば、C#)を使用してILアセンブリを生成するようにコンパイラに示す。言語ヒント408には、C、C++などの、様々ないくつかのプログラミング言語のいずれか1つが割り当てられていることが可能である。ヒント410(以降、def:Classヒント410と呼ぶ)は、def:Classヒント410に割り当てられた名前414(例えば、MyButton)を使用してサブクラスを定義するようにコンパイラに示す。また、def:Classヒント410は、新しいサブクラスの関連付けが行われるべきネームスペース(例えば、「MyControlLib」)を特定するサブクラスネームスペース412も含むことが可能である。したがって、図4では、開発者が「System.Controls」ネームスペースの中にある「Button」クラスを拡張する「MyButton」と命名された新しいサブクラスを宣言的に定義している。この新しいサブクラスは、「MyControlLib」ネームスペースに関連付けられる。
図4に示したマークアップ400の中で、エレメント宣言タグ420(例えば、「Image」)が定義されている。特定のネームスペースはエレメント宣言タグ420内で定義されていないため、ネームスペース属性404がエレメント宣言タグ420に関連するエレメント(例えば、「Image」)の場所も定義する。エレメント宣言タグ420は、エレメント421およびソース属性422を含む。ソース属性422は、プロパティ424(例えば、「Source」)および値426(例えば、「HappyFace.jpg」)を含む。エレメント宣言タグ420は、「MyButton」と定義されたサブクラスに関するサブクラス定義内にあるため、エレメント宣言タグ420に関連するエレメントは、そのサブクラスがインスタンス化されたときにインスタンス化される。さらに、エレメント宣言タグ420に関連するエレメントは、その新しいサブクラスの子集合内に含まれる。言い換えれば、サブクラスがエレメント宣言タグ420に関連するエレメントに対する親である。したがって、マークアップ400により、コンパイラが定義されているサブクラス(例えば、「MyButton」)をルートとするエレメントツリーを生成することを可能にするような形で、開発者が階層を表現できるようになることが、当分野の技術者には認められよう。
図5は、サブクラスに関する識別子、コード、およびコンストラクタを定義するための例示的なシンタックスを示している。マークアップ500の主立った部分には、識別子、コード、およびコンストラクタを定義するためのマークアップに加えて、前述したマークアップ400が含まれる。読み易くするため、図4に示し、前掲した符号は、新しい態様を説明するのに役立つのでない限り、図5では示していない。図5では、エレメント宣言タグ420が、id属性520およびイベント属性526などの属性をさらに含む。id属性520は、idプロパティ521(例えば、「ID」)およびid値523(例えば、「img1」)を含む。id属性520は、本発明によるサブクラスの識別子を定義するための例示的なメカニズムを示している。
イベント属性526は、イベントトリガ527(例えば、「DataLoaded」)およびイベント値529(例えば、「OnLoaded」)を含む。イベントトリガ527は、監視されるイベントを指定し、またイベント値529は、イベントトリガ527が生じた際に実行されるメソッドを指定する。イベント値529は、メソッド530(例えば、「OnLoaded」ファンクション)に関連している。メソッド530は、プログラミング言語を使用して記述されていることが可能である。メソッド530は、マークアップ500内で定義されたクラスおよびサブクラスのインスタンスを参照することが可能である。メソッド530がマークアップドキュメント内のプログラミング言語を使用して記述されているとき、メソッド530は、コードヒント540に関連する。コードヒント540により、開発者は、サブクラス定義の本文にコードの断片(code snippet)を追加することが可能になる。一実施例では、コードは、コードヒント540に従い、呼出し可能なメソッドまたはイベントハンドラである。マークアップ500の中で、例えば、OnLoadedファンクション530が、Imageコントロールによって生成されたDataLoadedイベントに対するイベントハンドラの役割をする。図5に示したCustomInitファンクション550などのその他のコードの断片も、サブクラス定義の本文に追加することができる。
また、マークアップ500は、コンストラクタヒント542も含む。コンストラクタヒント542により、開発者は、サブクラスに関して生成されたデフォルトのコンストラクタを補足する補足のコンストラクタを記述することが可能になる。一実施例では、補足のコンストラクタは、生成されたデフォルトのコンストラクタによって実行される最後の挙動(behavior)である。補足のコンストラクタは、構成時にサブクラスの挙動に影響を与えるコードを含むことが可能である。開発者は、補足のコンストラクタ内でスーパークラスのコンストラクタを呼び出すことができる。図5に示した補足のコンストラクタは、ユーザによって定義された専用メソッドであるCustomInitファンクション550を呼び出す。
図6は、サブクラスに関するプロパティおよびイベントを定義するための例示的なシンタックスを示している。マークアップ600の主立った部分には、プロパティおよびイベントを定義するためのマークアップに加えて、前述したマークアップ400およびマークアップ500が含まれる。読み易くするため、図4〜図5に示し、前掲した符号は、新しい態様を説明するのに役立つのでない限り、図6では示していない。
マークアップ600は、プロパティをサブクラス上で定義することを可能にするプロパティヒント610を含む。プロパティは、サブクラスのメンバ変数として作用する。プロパティヒント610は、名前属性612、タイプ属性614、デフォルト値属性616、およびフラグ属性618などの属性を含むことが可能である。名前属性612は、プロパティの名前を指定する。一実施例では、名前は、大文字と小文字が区別され、ランタイムエンジンは、名前に使用される文字に全く制約を課さない。名前は、その名前を登録する所有者に固有でなければならない。タイプ属性614は、プロパティの値のタイプを指定する。このタイプには、組込みタイプ、ユーザ定義タイプ、ストラクト(struct)タイプ、クラスタイプ、インターフェースタイプ、列挙(enum)タイプ等が含まれる。デフォルト値属性616は、プロパティがインスタンス化されたときに割り当てられる値を指定する。フラグ属性618は、プロパティがインスタンス化されたときにラッパ(wrapper)によって生成されるメソッドのタイプを指定する。フラグは、読取り専用、子エレメントに継承可能、専用などの、プロパティの特性を制御する能力を有する。
また、マークアップ600は、イベントヒント620も含む。イベントヒント620により、イベントをサブクラス上で定義することが可能になる。イベントヒント620は、名前属性622、ルート属性624、フラグ属性626などの属性を含むことが可能である。名前属性622は、イベントを指し示す文字列を指定する。xmlファイルがサブクラスを使用する際、xmlファイルは、この文字列を使用して適切なアプリケーション開発者によって定義されたコードを付加する。ルート属性624は、イベントを生成させる箇所のツリー内のエレメントを決めるメソッドを指定する。フラグ属性626はイベントに関連するその他の特徴を指定する。例えば、マークアップ600の場合、マークアップコンパイラは、DblClickと呼ばれるイベントを可能にするコードを生成し、サポートされるルート、フラグなどの、そのイベントに関連する情報を含む。本発明の範囲を逸脱することなく、属性に関連する名前および値を変更できることが、当分野の技術者には認められよう。
また、マークアップ600は、イベントハンドラ宣言630も含む。イベントハンドラ宣言630には、公衆/専用、委託、リターンタイプなどのイベントハンドラ変更子632が関連していることが可能である。図6で、イベントハンドラ宣言630は、関連するイベントが生じたときに呼び出されるイベントハンドラ(すなわち、メソッド)(例えば、「DblClickEventHandler」)を宣言している。
その他のタグも、マークアップドキュメント内で定義することができる。例えば、ルートタグ(例えば、「def:Library」)を使用して、別個のファイルの中のサブクラスを定義すること、1つのファイルの中で他のサブクラスとともにサブクラスを定義することなどを行うようにコンパイラおよび/またはパーサに通知することが可能である。カスタムエレメント、ルートタグ内で定義されたすべてのクラス等に関して、ネームスペースを定義することができる。
図7は、マークアップドキュメント内からのサブクラスを使用するための例示的なシンタックスを示すマークアップドキュメントの主立った部分を示している。マークアップ700が、ルートエレメント702(例えば、FlowPanel エレメント)、デフォルトのネームスペース宣言704、定義ネームスペースプレフィクス706、およびエレメント708を含む。エレメント708は、前に明示したシンタックスを使用して作成されたカスタムコンポーネントを参照することが可能なことが認められよう。デフォルトのネームスペース宣言704は、プレフィクスなしのタグに関するデフォルトのネームスペースを指定する。例示的なマークアップ700の中で、デフォルトのネームスペース宣言704は、「System.Controls」ネームスペースを参照する。定義ネームスペースプレフィクス706は、カスタムコンポーネントまたはカスタムエレメントが見出される可能性がある場所を指定する。例示的なマークアップ700の中で、定義ネームスペースプレフィクス706は、「MyControlLib」を参照する。エレメント708は、クラス名710(例えば、「MyControlLib」)、識別子712、およびテキスト文字列714を含む。クラス名710は、このエレメントに関してインスタンス化されたクラスを参照する。識別子712は、エレメントを参照し、名前(例えば、「ID」)および値(例えば、「button1」)を含む。この値は、ランタイム中、クラス名710のインスタンスの名前になる。
実施例の一般化された動作
図8は、本発明の一実施例による宣言的に定義されたサブクラスをコンパイルするためのプロセスを一般的に示す論理流れ図である。図4〜図6に示した例示的なマークアップ、並びに図10の代表的なソースコードを図8と併せて使用してプロセスを説明する。図10をマークアップ600と比較した後、容易に認識することができる通り、本発明により、開発者が基礎にあるプログラミング言語を理解することを必要とすることなく、洗練されたサブクラスを宣言的に生成することが可能になる。図10の代表的なコードは、C#ソースコードである。ただし、マークアップコンパイラは、本発明に従って、任意のプログラミング言語のシンタックスを使用して代表的なコードを生成することができる。
プロセスは、ブロック801で開始し、マークアップコンパイラがマークアップドキュメントをコンパイルし、サブクラス定義を有するマークアップに出会っている。マークアップコンパイラは、マークアップを別の形式としては認識しないこと、サブクラスタブ(例えば、def:Class)を認識すること等によって自らがサブクラス定義に出会ったことを判定することができる。例えば、マークアップ400の中で、マークアップコンパイラは、サブクラス定義を特定するサブクラスタグ(例えば、def:Classヒント410)に出会うまでに、いくつかのステートメントを処理することが可能である。別の実施例では、サブクラスタグに出会うのは、サブクラスがベースクラス(例えば、ボタン)を指定しないときなど、他のステートメントより前とすることも可能である。一般に、サブクラスタグは、マークアップ内でエレメントタグが出現することが可能なところであれば、どこにでも出現することが可能である。マークアップがサブクラス定義を有するものと特定されると、処理はブロック802に進む。
ブロック802で、サブクラスタグが処理される。図4に関連して説明した通り、サブクラスタグ(def:Classヒント410とも呼ばれる)に、名前414が割り当てられ、名前414は、サブクラスネームスペース412も含むことが可能である。この情報に基づき、図10の行1などの代表的なコードをアセンブリのために生成することができる。さらに、図10の行5に示したように、割り当てられた名前を有するクラスが生成される。行5には、さらなるステートメント(例えば、ネームスペースおよびスーパークラス)が処理されると、他の生成されたコードが増補される。サブクラスタグを処理することの一環として、プロセスは、サブクラスが何らかのクラス(すなわち、スーパークラス)から拡張されているかどうかを明らかにし、スーパークラスに関連する情報を獲得する。図4で、作成中のサブクラス「MyButton」が、スーパークラスタグ402で定義された「Button」から拡張されている。したがって、図10の行5は、図示する通り、ButtonからMyButtonを拡張する代表的なコードを含む。
さらに、サブクラスに関するデフォルトのコンストラクタが生成される。この場合も、さらなるステートメントが処理されると、このデフォルトのコンストラクタに、さらなる代表的なコードが増補されることが可能である。図10の行23〜24および26が生成された代表的なコードに相当する。ただし、以下に説明する通り、「this._Initialize_This()」は、別のステートメントを処理した後に追加されるコードである。サブクラスタグが処理されると、処理はブロック804に進む。
ブロック804で、マークアップ内の次のステートメントが取り出される。次のステートメントは、サブクラス定義の中のサブクラスタグステートメントの場所に依存して、サブクラスタグステートメントの前のステートメントであることも、後のステートメントであることも可能である。次のステートメントが取り出されると、処理は判定ブロック806に進む。
判定ブロック806で、ステートメントがクラスを定義しているかどうかの判定が行われる。前述した通り、本発明により、階層を宣言的に表現することが可能になる。一実施例では、サブクラスの子である別のクラス(すなわち、エレメント)を定義するステートメントがサブクラスタグステートメントの後に出現する。当面、現行のステートメントはクラスを定義していないものと想定すると、処理はブロック808に進む。
ブロック808で、ステートメントが処理される。サブクラス定義の中で出現する可能性がある様々なタイプのステートメントが存在する。このステートメントは、様々な順序で出現することが可能である。各タイプのステートメントに関して関与する処理を以下により詳細に説明する。ただし、一般に、処理される各ステートメントは、サブクラス定義に関するさらなる代表的なコードの生成をもたらす。ステートメントの1つがブロック808で処理されると、処理は判定ブロック810に進む。
判定ブロック810で、サブクラス定義に関して処理されるべきステートメントが残っているかどうかが判定される。別のステートメントが存在する場合、処理はループバックしてブロック804〜808を通り、そのステートメントを処理する。サブクラス定義の中のすべてのステートメントが処理されると、処理は判定ブロック810からブロック812に進む。
ブロック812で、以上のプロセス中に生成された代表的なコードを使用して、サブクラス定義に関するILアセンブリが生成される。開発者が、コンパイラヒントステートメント(ブロック820)のどれかの中で、代表的なコードを生成する際に使用するプログラム言語を指定していること、どのアセンブリファイルがサブクラス定義を記憶するかを指定していること等が可能である。ILアセンブリまたはILアセンブリ群が生成されると、処理は完了である。前述した通り、以上に生成されたアセンブリが、この時点で、従来のプログラミング言語を使用する、本発明によるマークアップステートメントを使用するなどして、実行されるように用意されている。アセンブリは、あたかもプログラム言語を使用して記述されているかのように見える。
判定ブロック806に戻ると、ステートメントが新しいクラス(すなわち、エレメント)に関する定義を開始した場合、処理はブロック814に進む。ブロック814で、この新しいクラスに関係があるステートメントが、各ステートメントに関してブロック808内の処理を使用して処理され、その新しいクラスに関係があるすべてのステートメントの処理が済むまで、処理が続けられる。例えば、図5で、新しいクラス「Image」に関するステートメント520、526、422が処理される。Imageは、サブクラス「MyButton」の子である。処理はブロック804に進み、そのサブクラスに関連するステートメントを処理することを続けて行う。
次に、ブロック808に戻ると、サブクラス定義の中で出現する可能性があるそれぞれの個別タイプのステートメント(ブロック820〜832)に関する処理を説明する。ブロック820で、コンパイラヒントであるステートメントが処理される。一般に、コンパイラヒントであるステートメントは、どのようにアセンブリが生成されるべきかに関する情報をマークアップコンパイラに提供する。例えば、図4では、言語ヒント408が、代表的なコードを生成する際に使用するプログラミング言語をマークアップコンパイラに通知するコンパイラヒントステートメントである。図4で、言語ヒント408には、C#が割り当てられており、したがって、図10で示される代表的なコードは、C#ソースコードである。
ブロック822で、ネームスペースを定義するステートメントが処理される。次に、このネームスペースが、図10の行2および3で示すように代表的なコードの中に含められる。
ブロック824で、クラスの識別子(id)を定義するステートメントが処理される。マークアップドキュメント内のあらゆるid属性に関して、マークアップコンパイラは、関連するクラスに関するフィールドメンバを生成する。id属性が定義されているクラスと同じタイプを有するフィールドメンバが生成される。フィールドメンバの名前は、そのid属性に割り当てられたid値である。例えば、図5では、Imageクラスに関係があるステートメントを処理する際、id属性520に出会う。したがって、図10の行7で示す通り、マークアップコンパイラは、以下の通り定義されたフィールドメンバを有するMyButtonクラスに関する代表的なコードを生成する。
private System.Controls.Image img1
ランタイム中、フィールドメンバは、InitComponent()メソッドにおいて生成された対応するタイプ(例えば、Image)のインスタンスに初期設定される。この結果、MyButtonクラスの中の任意のコードが、単にクラスのid値によって階層内の任意の他のエレメントインスタンスにアクセスすることができる。フィールドメンバを初期設定することを図10の行37で示している。
ブロック826で、クラスに関するプロパティを定義するステートメントが処理される。マークアップドキュメント内で定義されたあらゆるプロパティに関して、マークアップコンパイラは、そのプロパティに関する代表的なソースコードを生成し、必要な場合、そのプロパティを登録する。例えば、図6では、マークアップ600が、様々な属性612〜618を有するプロパティヒント610を含んでいる。プロパティヒント610は、プロパティヒント610に続くステートメントがプロパティに関するものであることをマークアップコンパイラに知らせる。次に、属性612〜618がプロパティステートメントとして読み込まれる。マークアップコンパイラは、図10の行9〜12に示される通り、「Label」プロパティに関する代表的なコードを生成してMyButtonクラスに関するプロパティを登録する。また、マークアップコンパイラは、図10の行28〜30で示されるプロパティを定義する代表的なコードも生成する。行28〜30は、どのように名前属性612が代表的なコードの中のプロパティの名前になるか、またどのようにタイプ属性614が代表的なコードの中のプロパティに関するタイプになるかを示している。
一実施例では、プロセスは、反映を使用してランタイムにコードを実行するプロパティのタイプに関するTypeConverterを呼び出し、文字列をプロパティタイプの実際のオブジェクトインスタンスに変換することによってプロパティの値に関するコードを生成する。別の実施例では、プロセスが実際のオブジェクト値を獲得するためにプロパティに関するタイプコンバータを呼び出し、値をInstanceDescriptorオブジェクトに変換することもできる。InstanceDescriptorオブジェクトは、十分な情報を含み、したがって、マークアップコンパイラは、このオブジェクトを反映させて、プロパティヒントに関連する属性の中で指定される通り値のタイプの新しいインスタンスを生成する代表的なコードを生成することができる。図19の行28〜30は、ランタイム中、どのようにlabelPropertyがLabelプロパティの割当て値でMyButtonのインスタンス上に設定されるかを示している。この割当て値は、マークアップ内で(図7に示す通り)宣言的に割り当てること、または任意のプログラミング言語を使用してプログラミングで割り当てることが可能である。
ブロック828で、クラスに関するイベントを定義するステートメントが処理される。イベントステートメントの場合、マークアップコンパイラは、そのイベントに関する代表的なコードを生成する。イベントは、図5に示したイベント属性526、および図6に示したイベントヒント620などの様々なメカニズムを使用してマークアップ内で定義することができる。まず、イベント属性を使用するメカニズムを説明する。イベント属性は、イベントトリガおよびイベント値を含む。イベントトリガは、イベントに対応し、またイベント値は、イベントトリガが生じた際に実行されるメソッドに対応する。図5を参照すると、「this.OnLoaded」を新しいSystem.Controls.DataLoadedEventHandlerとして定義することにより、イベント値529(「OnLoaded」)が、図10の代表的なコードの行38〜40でイベントハンドラとして追加されている。AddHandlerの最初のパラメータをSystem.Controls.Image.DataLoadedEventとして定義することにより、イベントトリガ527(「DataLoaded」)が、図10の代表的なコードの行38でイベントとして追加されている。AddHandlerのその他のパラメータは、デフォルト値を使用すること、またはマークアップドキュメント内で指定されることが可能である。
次に、イベントヒント620を使用するメカニズムを説明する。イベントヒント620は、イベント名属性およびその他の属性を含む。イベント名属性に割り当てられた名前は、イベントとして登録される。例えば、図6を参照すると、「DblClick」がイベント名属性に割り当てられた名前である。したがって、「DblClick」は、図10の行14〜16で生成されるRegisterEventメソッドの最初のパラメータである。メソッド「DblClickEventHdlr」もまた図10のRegisterEventメソッドのパラメータとして含まれる。この場合も、RegisterEventメソッドのその他のパラメータは、デフォルト値を使用すること、またはその他の属性を使用してマークアップドキュメント内で指定されることが可能である。ランタイム中、一実施例によれば、イベントは、反映を使用してDblClickEventHandlerのタイプを特定し、そのメソッドを探し出すように結合(hook up)される。
ブロック830で、コードを定義するステートメントが処理される。コードを定義するステートメントは、コードヒントなどのコンパイラヒントステートメント(ブロック820)に従う。このステートメントは、プログラミング言語で記述され、代表的なコードの中でそそまま現れる。例えば、図5がメソッド530およびCustomInitファンクション550を示している。メソッド530およびCustomInitファンクション550はそれぞれ、図10の行18〜19および21で現れる。
ブロック832で、補足のコンストラクタを定義するステートメントが処理される。この場合も、補足のコンストラクタを定義するステートメントは、コンストラクタヒントなどのコンパイラヒントステートメント(ブロック820)に従う。マークアップコンパイラは、補足のコンストラクタ(図10の「this._Initialize_This()」)を生成し、その補足のコンストラクタ内でステートメントを追加する。例えば、図5では、コンストラクタヒント542の後のステートメントが「CustomInit()」を呼び出す。したがって、図10では、行33で、マークアップコンパイラが、「CustomInit()」を代表的なソースコードの中の補足のコンストラクタに追加する。
本発明を逸脱することなく、ブロック812は、ブロック804〜810を処理しながら、漸進的に行うことが可能なことが、当分野の技術者には認められよう。さらに、パーサ204およびマークアップコンパイラ202の機能上の実施形態に依存して、プロセス中にパーサ204とマークアップコンパイラ202の間でコールバックが存在することが可能である。
図9は、本発明の一実施例によるマークアップドキュメント内から宣言されたサブクラスを使用するためのランタイムプロセス900を一般的に示す論理流れ図である。図7に示した例示的なマークアップを図9と併せて使用してプロセス900を説明する。プロセス900は、ブロック901で開始し、ランタイムエンジンが特定のリソース(例えば、マークアップドキュメント)に関する要求を受け取り、その特定のリソースに関してコンパイル済みのバージョンが存在することを判定する。例えば、図7で、マークアップ700が以前にトークン化バイナリファイルにコンパイルされていないものと想定すると、マークアップコンパイラは、エレメント708に出会ったとき、MyButtonクラスが、関連するトークン化バイナリファイルおよびILアセンブリを有することを判定する。次に、MyButtonクラスに関するトークン化属性を含むこの関連するトークン化バイナリファイルがプロセス900を使用して処理される。関連するトークン化バイナリファイルおよびILアセンブリは、本発明を使用して生成されていることが可能である。処理はブロック902に進む。
ブロック902で、トークン化バイナリファイルがロードされる。トークン化バイナリファイルは、漸進的にロードされること、または全体がロードされることが可能である。トークン化バイナリファイルは、ロードされる必要があるトークン化バイナリファイルに関連するILアセンブリを特定することが可能である。図7を参照すると、例えば、MyButtonクラスに関連するILアセンブリがロードされる。処理はブロック904に進む。
ブロック904で、トークンがトークン化バイナリファイルから取り出される。前述した通り、新しいランタイム環境において、生成されたトークン化バイナリファイルは、そのトークン化バイナリファイルを生成するのに使用されたプログラミング言語とは独立である。したがって、ランタイムエンジンは、トークン化バイナリファイルを生成するのに最初に使用されたプログラミング言語を考慮することなく、そのトークン化バイナリファイルを処理することができる。処理は判定ブロック906に進む。
判定ブロック906で、取り出されたトークンがイベントであるかどうかの判定が行われる。トークンがイベントではない場合、処理はブロック908に進む。
ブロック908で、トークンが処理される。前述した通り、トークンの処理は、トークン化バイナリファイルが生成された仕方に依存しない。言い換えれば、マークアップドキュメント内から、またはプログラミング言語を使用して宣言的に作成されたトークン化バイナリファイル内のトークンの処理は、同様に行われる。したがって、トークン化バイナリファイル内のトークンの処理は当分野の技術者には周知であるため、トークンの処理を本明細書で詳述するまでもない。処理は判定ブロック910に進む。
判定ブロック910で、トークン化バイナリファイル内にさらなるトークンが存在するかどうかが判定される。さらなるトークンが存在する場合、処理はブロック904にループバックして、前述した通り進められる。これに反して、もはやトークンが存在しない場合、処理は完了であり、終了ブロックに進む。
判定ブロック906に戻ると、トークンがイベントであった場合、処理はブロック912に進む。ブロック912で、トークン化バイナリファイルに関連するメタデータがロードされる。メタデータには、タイプ、リソース、メソッド等に関する記述が含まれる。処理はブロック914に進む。
ブロック914で、メタデータおよび反映を使用して、プロセスは、イベントに関するターゲットエレメントのタイプを見出す。これには、メタデータにアクセスすること、および各フィールドを調べてタイプを判別することが関わる。処理はブロック916に進む。
ブロック916で、イベントは、そのターゲットエレメントのタイプに対して検証される。これにより、イベントが有効なイベントであることが確実なものとなる。イベントがそのターゲットエレメントのタイプに対して有効なイベントではない場合、誤りがもたらされる。処理はブロック918に進む。
ブロック918で、ターゲットエレメントのタイプに対して判定を使用してイベントメソッドを獲得し、次に、イベントメソッドが実行される。イベントメソッドの実行には、関連するILアセンブリ内のコードを実行することが関わる。したがって、図7を参照すると、MyButtonがインスタンス化されてイベントが見出されると、イベントメソッド(「DblClickEvent」)が付加される。これにより、イベントハンドラ(例えば、DblClickEventHandler)がイベント(例えば、DblClick)に付加される。処理は判定ブロック910に進み、前述した通り進められる。
したがって、前述した通り、本発明により、マークアップドキュメント内でサブクラスを宣言的に定義するため、およびマークアップドキュメント内からサブクラスを使用するためのメカニズムが提供される。これにより、開発者が、いずれか1つのプログラミング言語でコンポーネントをどのように実装するかを気にする代わりに、コンポーネントを使用する仕方により集中することができるようになる。
以上の明細書、実施例、およびデータにより、本発明のコンポーネントの製造および使用の完全な説明が提供される。本発明の趣旨および範囲を逸脱することなく、本発明の多くの実施例を実現することが可能であるため、本発明は、特許請求の範囲に存するものとする。
本発明の例示的な実施例で使用することが可能な例示的なコンピューティングデバイスを示す図である。 本発明の一実施例を実施するためのコンポーネントを一般的に示す機能ブロック図である。 本発明の一実施例を実施するためのランタイム環境を一般的に示す機能ブロック図である。 本発明の一実施例によるサブクラスを宣言的に定義するための例示的なシンタックスを示すマークアップドキュメントの一連の主立った部分を示す図である。 本発明の一実施例によるサブクラスを宣言的に定義するための例示的なシンタックスを示すマークアップドキュメントの一連の主立った部分を示す図である。 本発明の一実施例によるサブクラスを宣言的に定義するための例示的なシンタックスを示すマークアップドキュメントの一連の主立った部分を示す図である。 マークアップドキュメント内から実行可能なコンポーネントを使用するための例示的なシンタックスを示すマークアップドキュメントの主立った部分を示す図である。 本発明の一実施例による宣言的に定義されたサブクラスをコンパイルするためのプロセスを一般的に示す論理流れ図である。 本発明の一実施例によるマークアップドキュメント内から宣言されたサブクラスを使用するためのランタイムプロセスを一般的に示す論理流れ図である。 図4〜図6に示したマークアップドキュメントに基づき図2に示したマークアップコンパイラによって生成された代表的なソースコードの例示的なソースコードリストを示す図である。
符号の説明
100 コンピューティングデバイス
102 処理ユニット
104 システムメモリ
105 オペレーティングシステム
106 プログラムモジュール
107 プログラムデータ
109 取外し可能なストレージ
110 取外し不可能なストレージ
112 入力装置
114 出力装置
116 通信接続
118 他のコンピューティングデバイス
202 マークアップコンパイラ
204 パーサ
206 マークアップドキュメント
208 トークン化バイナリファイル
210 ILアセンブリ
212 ソースコード
302 ランタイムエンジン
304 トークン化バイナリリーダ
306 トークン化バイナリローダ
308 ページマップテーブル
310 メタデータ

Claims (4)

  1. サブクラスに関する実行可能なアセンブリを生成するための命令を記憶したコンピュータ可読記録媒体であって、
    前記命令により、コンピュータに、
    拡張可能なマークアップ言語(XML)に基づいて作成されたマークアップドキュメント内で、スーパークラスからサブクラスを定義するサブクラス定義を特定させることと、
    前記サブクラスに関連するオブジェクトのインスタンスを生成可能なアセンブリを前記サブクラス定義に基づいて生成させること、を行わせ、
    前記生成されたアセンブリはプログラム言語とは関係なくコンピュータ内で実行されるように前記アセンブリを生成するために最初に使用されたプログラミング言語からは独立であり、
    前記サブクラス定義を前記コンピュータに特定させることはサブクラスタグを構文解析させることを含み、該サブクラスタグは名前を定義するためのサブクラス名前属性を含み、前記名前はインスタンス化される前記オブジェクトのタイプに関連付けられ、
    前記アセンブリを前記コンピュータに前記サブクラス定義に基づいて生成させることは、
    前記サブクラスがそこから導出されるスーパークラスを定義するスーパークラスタグを前記コンピュータに構文解析させることと、
    プログラム言語に関連するシンタックスを使用して前記コンピュータに継承を指定させることと、
    前記アセンブリの一部となるように前記コンピュータに前記シンタックスをコンパイルさせること
    を含むことを特徴とするコンピュータ可読記録媒体。
  2. コンピュータによって実施される、実行可能なアセンブリを生成する方法であって、
    コンピュータ内において、拡張可能なマークアップ言語(XML)に基づいて作成されたマークアップドキュメント内で、スーパークラスからサブクラスを定義するサブクラス定義を特定するステップと、
    コンピュータ内において、前記サブクラスに関連するオブジェクトのインスタンスを生成可能なアセンブリを前記サブクラス定義に基づいて生成するステップと、を含み
    前記生成されたアセンブリはプログラム言語とは関係なくコンピュータ内で実行されるように前記アセンブリを生成するために最初に使用されたプログラミング言語からは独立であり、
    前記サブクラス定義を特定する前記ステップはサブクラスタグを構文解析することを含み、該サブクラスタグは名前を定義するためのサブクラス名前属性を含み、前記名前はインスタンス化される前記オブジェクトのタイプに関連付けられることを含み、
    アセンブリを前記サブクラス定義に基づいて生成する前記ステップは、
    前記サブクラスがそこから導出されるスーパークラスを定義するスーパークラスタグを構文解析するステップと、
    プログラム言語に基づくシンタックスを使用して継承を指定するステップと、
    前記アセンブリの一部となるように前記シンタックスをコンパイルするステップと
    を含むことを特徴とする方法。
  3. 拡張可能なマークアップ言語(XML)に基づいて作成されたマークアップドキュメントを使用してスーパークラスからサブクラス定義からアセンブリを生成するためのコンピュータシステムであって、
    プロセッサとメモリを含んでおり、
    該メモリは、前記プロセッサにより複数のコンピュータ実行可能命令がロードされるために割り振られ、
    該コンピュータ実行可能命令により、前記プロセッサに
    マークアップドキュメント内で、サブクラスを定義するサブクラス定義を特定させるステップと、
    前記サブクラスに関連するオブジェクトのインスタンスを生成可能なアセンブリを前記サブクラス定義に基づいて生成させるステップと、を含む方法を行わせ、
    前記生成されたアセンブリはプログラム言語とは関係なくコンピュータ内で実行されるように前記アセンブリを生成するために最初に使用されたプログラミング言語からは独立であり、
    前記サブクラス定義を特定させる前記ステップは前記プロセッサにサブクラスタグを構文解析させることを含み、該サブクラスタグは名前を定義するためのサブクラス名前属性を含み、前記名前はインスタンス化される前記オブジェクトのタイプに関連付けられることを含み、
    アセンブリを前記プロセッサに前記サブクラス定義に基づいて生成させる前記ステップは、前記オブジェクトがインスタンス化されると行われる少なくとも1つの補足のアクションを定義するコンストラクタヒントを前記プロセッサに構文解析させることを含んでおり、前記補足のアクションは前記アセンブリの一部であることを特徴とするコンピュータシステム。
  4. 実行可能なアセンブリを生成するシステムであって、
    拡張可能なマークアップ言語(XML)に基づいて作成されたマークアップドキュメント内で、スーパークラスからサブクラスを定義するサブクラス定義を特定するための手段と、
    前記サブクラスに関連するオブジェクトのインスタンスを生成可能なアセンブリを前記サブクラス定義に基づいて生成するための手段と、を含み、
    前記生成されたアセンブリはプログラム言語とは関係なくコンピュータ内で実行されるように前記アセンブリを生成するために最初に使用されたプログラミング言語からは独立であり、
    前記サブクラス定義を特定するための前記手段はサブクラスタグを構文解析するための手段を含み、該サブクラスタグは名前を定義するためのサブクラス名前属性を含み、前記名前はインスタンス化される前記オブジェクトのタイプに関連付けられ、
    アセンブリを前記サブクラス定義に基づいて生成するための前記手段は、
    前記サブクラスがそこから導出されるスーパークラスを定義するスーパークラスタグを構文解析するための手段と、
    プログラム言語に基づくシンタックスを使用して継承を指定するための手段と、
    前記アセンブリの一部となるように前記シンタックスをコンパイルするための手段と
    を含むことを特徴とするシステム。
JP2003141202A 2003-02-28 2003-05-19 マークアップ内でサブクラスを宣言的に定義し、使用するためのシステムおよび方法 Expired - Fee Related JP4806158B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/377,313 US7120618B2 (en) 2003-02-28 2003-02-28 System and method for defining and using subclasses declaratively within markup
US10/377,313 2003-02-28

Publications (2)

Publication Number Publication Date
JP2004265371A JP2004265371A (ja) 2004-09-24
JP4806158B2 true JP4806158B2 (ja) 2011-11-02

Family

ID=23488596

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003141202A Expired - Fee Related JP4806158B2 (ja) 2003-02-28 2003-05-19 マークアップ内でサブクラスを宣言的に定義し、使用するためのシステムおよび方法

Country Status (15)

Country Link
US (1) US7120618B2 (ja)
EP (1) EP1452962B1 (ja)
JP (1) JP4806158B2 (ja)
KR (2) KR100889671B1 (ja)
CN (1) CN100454244C (ja)
AU (1) AU2003204197B2 (ja)
BR (1) BR0301738A (ja)
CA (1) CA2428558C (ja)
HK (1) HK1066616A1 (ja)
MX (1) MXPA03004411A (ja)
MY (1) MY136473A (ja)
NO (1) NO329240B1 (ja)
RU (1) RU2347269C2 (ja)
TW (1) TWI327701B (ja)
ZA (1) ZA200303680B (ja)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7418659B2 (en) * 2003-02-28 2008-08-26 Microsoft Corporation System and method for declaring a resource within a markup document
US7725884B2 (en) * 2003-02-28 2010-05-25 Microsoft Corporation System and method for compiling markup files
US7890928B2 (en) * 2003-07-26 2011-02-15 Pilla Gurumurty Patrudu Mechanism and system for representing and processing rules
US20050154978A1 (en) * 2004-01-09 2005-07-14 International Business Machines Corporation Programmatic creation and access of XML documents
US20070136658A1 (en) * 2005-11-29 2007-06-14 International Business Machines Corporation Handling events in a descriptive context
US9128727B2 (en) * 2006-08-09 2015-09-08 Microsoft Technology Licensing, Llc Generation of managed assemblies for networks
US8380742B2 (en) * 2006-10-10 2013-02-19 Microsoft Corporation Integration of database reporting with ERP systems
US7765241B2 (en) * 2007-04-20 2010-07-27 Microsoft Corporation Describing expected entity relationships in a model
US8880564B2 (en) * 2007-10-11 2014-11-04 Microsoft Corporation Generic model editing framework
US7530060B1 (en) * 2008-01-08 2009-05-05 International Business Machines Corporation Methods and computer program product for optimizing binaries with coding style formalization
US9584877B2 (en) * 2011-06-16 2017-02-28 Microsoft Technology Licensing, Llc Light-weight validation of native images
US9015661B1 (en) * 2011-06-23 2015-04-21 The Mathworks, Inc. Restricting class inheritance relationships
US9158505B2 (en) * 2014-01-09 2015-10-13 Microsoft Technology Licensing, Llc Specifying compiled language code in line with markup language code
US20240111555A1 (en) * 2022-10-04 2024-04-04 International Business Machines Corporation Unknown object sub-class identification

Family Cites Families (12)

* 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
US6342907B1 (en) 1998-10-19 2002-01-29 International Business Machines Corporation Specification language for defining user interface panels that are platform-independent
US6427228B1 (en) * 1999-05-12 2002-07-30 International Business Machines Corporation Combining a meta data file and java source code to dynamically create java classes and javabeans
US6732330B1 (en) * 1999-09-30 2004-05-04 International Business Machines Corporation Scripting language blocks to support multiple scripting languages in a single web page
GB0011426D0 (en) * 2000-05-11 2000-06-28 Charteris Limited A method for transforming documents written in different XML-based languages
US6941510B1 (en) * 2000-06-06 2005-09-06 Groove Networks, Inc. Method and apparatus for efficient management of XML documents
US6957394B1 (en) * 2000-12-01 2005-10-18 Microsoft Corporation Rendering controls of a web page according to a theme
US20020091818A1 (en) * 2001-01-05 2002-07-11 International Business Machines Corporation Technique and tools for high-level rule-based customizable data extraction
KR20020061888A (ko) * 2001-01-18 2002-07-25 박철만 엑스엠엘 응용프로그램의 개발방법
US20030037311A1 (en) * 2001-08-09 2003-02-20 Busfield John David Method and apparatus utilizing computer scripting languages in multimedia deployment platforms
US20040064826A1 (en) * 2002-09-30 2004-04-01 Timothy Lim Method and system for object system interoperability
US20040064825A1 (en) * 2002-09-30 2004-04-01 Timothy Lim Method and system for object system interoperability

Also Published As

Publication number Publication date
JP2004265371A (ja) 2004-09-24
TWI327701B (en) 2010-07-21
KR100889671B1 (ko) 2009-03-19
KR20040077410A (ko) 2004-09-04
KR100942322B1 (ko) 2010-02-12
AU2003204197B2 (en) 2009-10-01
AU2003204197A1 (en) 2004-09-16
NO20032232L (no) 2004-08-30
CA2428558A1 (en) 2004-08-28
MXPA03004411A (es) 2005-08-26
US7120618B2 (en) 2006-10-10
RU2347269C2 (ru) 2009-02-20
EP1452962A2 (en) 2004-09-01
NO20032232D0 (no) 2003-05-16
TW200416569A (en) 2004-09-01
CA2428558C (en) 2013-01-22
CN100454244C (zh) 2009-01-21
EP1452962B1 (en) 2018-01-24
KR20090024229A (ko) 2009-03-06
NO329240B1 (no) 2010-09-20
EP1452962A3 (en) 2007-01-10
CN1525317A (zh) 2004-09-01
HK1066616A1 (en) 2005-03-24
MY136473A (en) 2008-10-31
US20040172617A1 (en) 2004-09-02
ZA200303680B (en) 2004-08-13
BR0301738A (pt) 2004-10-26

Similar Documents

Publication Publication Date Title
KR100942322B1 (ko) 마크업 내부에서 명시적으로 서브클래스를 정의하고 이용하는 시스템 및 방법
US8954939B2 (en) Extending a development environment
US5805899A (en) Method and apparatus for internal versioning of objects using a mapfile
JP4365142B2 (ja) プロパティをオブジェクトに関連付けするための、コンピュータ可読媒体、システム、および、方法
KR101795844B1 (ko) 런타임 시스템
US7086041B2 (en) Extensible type system for representing and checking consistency of program components during the process of compilation
WO2019237701A1 (zh) 跨语言编程
US20080209316A1 (en) System and method of implementing an extensible command-line interface
US9417931B2 (en) Unified metadata for external components
US8141035B2 (en) Method for accessing internal states of objects in object oriented programming
JP2007521568A (ja) 複数の例外処理モデルの中間表現
US20050065953A1 (en) System and method for changing defined elements in a previously compiled program using a description file
US20040268301A1 (en) Adding new compiler methods to an integrated development environment
US7685581B2 (en) Type system for representing and checking consistency of heterogeneous program components during the process of compilation
Freeman Essential TypeScript 5
US20040268307A1 (en) Representing type information in a compiler and programming tools framework
US7516460B2 (en) System and method for creating a runtime connection interface for attributes and element tags defined within a subclass in a markup document
US7418659B2 (en) System and method for declaring a resource within a markup document
CN117234466B (zh) 企业管理软件开发方法、系统、设备及存储介质
CN117369861A (zh) 应用程序的线程管理策略配置方法及相关装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060425

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080704

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081006

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20081114

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090212

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20090216

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20090216

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20090323

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20090410

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20100615

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20100615

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110603

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110608

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110701

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110812

R150 Certificate of patent or registration of utility model

Ref document number: 4806158

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140819

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees