QVT

QVT（Queries/Views/Transformations）とは、Object Management Groupが定義したモデル駆動型アーキテクチャにおけるモデル変換の標準である。Meta-Object Facility(MOF)に関連する標準であることから、MOF QVT とも呼ばれる。
解説.
モデル変換とは、メタモデル MMa に準拠したモデル Ma をメタモデル MMb に準拠したモデル Mb に変換するプロセスである。MMa=MMb であれば、その変換を内発的（endogeneous）といい、そうでなければ外発的（exogeneous）という。モデル変換はモデル駆動型アーキテクチャ(MDA)において重要な役割を担う。このため、OMG は MOF Query/Views/Transformations の RFP（Request for proposal）を発行し、MDA 関連の推奨規格（UML、MOF、OCLなど）に互換性のある標準を求めた。いくつかの企業や研究機関がこれに応じ、3年をかけて共同提案が策定され、標準として承認された。
現在では、QVT標準に準拠したオープンソースも含めたいくつかの製品がある。QVT はソースモデルからターゲットモデルへの変換の標準的手法を定義している。標準の中にはいくつかのアイデアが含まれている。その1つとして、ソースおよびターゲットモデルが MOF のメタモデルに準拠することを推奨している。また、変換プログラム自身も MOF のメタモデルに準拠したモデルであるとしている。これはつまり、QVT の抽象構文は MOF 2.0 のメタモデルに従うべきだということを意味する。
実際の標準は、やや複雑な構成となっている。まず、QVT 言語は OCL 2.0 標準を統合し、命令型 OCL への拡張を行っている。さらに、QVT は "QVT/Relations"、"QVT/Core"、"QVT/OperationalMapping" という3つのドメイン固有言語を定義し、これらの言語が階層型アーキテクチャを構成している。Relations と Core は宣言型言語であり、それぞれ抽象化レベルが異なる。また、それらの間には規範的な対応関係が定義されている。Relations 言語はテキスト表現に加え、グラフィカルに定義された厳密な文法を持つ。QVT/OperationalMapping 言語は命令型言語であり、QVT/Relations と QVT/Core の拡張となっている。QVT/OperationalMapping 言語の文法は一般的な命令型言語の構文によく似ている（ループ、条件など）。
また、"QVT/BlackBox" という機構で他の言語（XSLT、XQuery）で表現された変換機能を呼び出すようになっており、これも仕様の重要な部分を占める。これは特に既存の QVT 以外のライブラリを統合する際に重要となる。
今のところ、QVT ではモデルからモデルへの変換しか扱っておらず、そのモデルも MOF 2.0 のメタモデルに対応したものだけである。各種文書（XML、SQLなど）とモデルの間の変換は、QVT の範囲にはないが、いずれ標準化される可能性はある。それらは他のドメイン固有言語を MDA の枠内で扱えるようにするものと見ることができる。
実装.
命令型QVT(QVT-OperationalMapping) :
宣言型QVT(QVT-Relations) :
宣言型QVT(QVT-Core) :
QVTに似た言語 ：
批判.
QVT は OMG 推奨の標準規格だが、以下のような欠点を批判されている:
これらの批判のいくつかは、将来QVT実装が広く使われるようになれば、問題ではなくなる。そうなって初めて XSLT や XQuery と対抗できるようになるだろう。