出典(authority):フリー百科事典『ウィキペディア(Wikipedia)』「2012/12/18 11:15:22」(JST)
アノテーション(英語:annotation。英語発音: /ˌænəˈteiʃən/ アナテイシャン)とは、あるデータに対して関連する情報(メタデータ)を注釈として付与すること。XML等の記述形式を用いてメタデータをタグ付けする場合が多い。付与したメタデータやタグを指してアノテーションという場合もある。
元々の意味は、標本などを閲覧した際に、その標本に対するコメントなどを付すことを指す。そのような情報が書かれたものを、アノテーションカードと呼ぶ。コンピュータ領域以外におけるアノテーションに関しては、関連項目に記載する。
目次
|
Javaでは、Java SE 5 から登場した機能にアノテーションという名前の機能がある。Javaのアノテーションは、クラスやメソッド、パッケージに対してメタデータとして注釈を記入する。Javaのアノテーションは実態はjava.lang.Annotation
インタフェースを継承したインタフェース(interface
)であり、自作することもできる。
Javaのアノテーションは三つに分けることができる。
@Deprecated
– 対象となるクラスやメソッドが非推奨であることを情報として付加する。Javadocの@deprecatedと同じ。@Override
– そのメソッドがスーパークラスのメソッドをオーバーライドしていることを示す。C#のoverride修飾子とほぼ同等の機能を果たす。@SuppressWarnings
– 引数で指定した特定の警告メッセージをJavaコンパイラに与えず無視する。@Target
– 定義したいアノテーションがどこに適用されるべきかを指し示すメタアノテーション。@Retention
– アノテーションの配置方法を設定するメタアノテーション。test
で始まるメソッドと同じ。setup()
メソッドと同じ。tearDown()
メソッドと同じ。クラスやメソッドにマーカーアノテーションを付加するには以下のようクラスやメソッドの接頭辞に最低一つ以上のスペースまたは改行コードを入れて修飾子のように記述する。 この例は、クラスに非推奨、メソッドに、スーパークラスからのメソッドをオーバーライドしていることを意味するマーカーアノテーションを付加している例である。
@Deprecated class DeprecatedClass { @Override public boolean equals(Object obj){ return this == obj; } }
単一値アノテーションを付加するには以下のようにする。 この例は、Serializable
インタフェースを実装したクラスのフィールドにstatic finalなserialVersionUIDが宣言されていないという警告を無視するアノテーションを付加していることを意味する。
@SuppressWarnings(value = {"serial"}) class NoSerialVersionIDClass implements java.io.Serializable{ }
これは、以下のような書き方もできる。これは単一値アノテーション@SuppressWarningsがvalue()メソッドを一つしか持たないことがわかっているためvalue = を省略できることを意味する。
@SuppressWarnings("serial") class NoSerialVersionIDClass implements java.io.Serializable{ }
このアノテーションは、戻り値の型がString[]になっているため同じvalue値であっても以下のように複数指定することができる。以下のように指定することで、シリアルバージョンIDが設定されていない警告と、コレクションで総称型による型チェックを行われていないことによって生ずる警告を無視することができる。 "unchecked"はメソッドに対してのみ設定することもできる。
@SuppressWarnings("serial", "unchecked") class NoSerialVersionIDClass implements java.io.Serializable{ public void setupList(){ List list = new ArrayList(); list.add("abcdef"); } }
このアノテーションは正確に記述すると以下のようにString[]配列の初期化宣言のようになる。
@SuppressWarnings(value = {"serial", "unchecked"})
フルアノテーションは、複数のデータ型を持つアノテーションである。ここでは自作したアノテーション@MyAnnotationがあるとき、以下のように、変数名 = 値の形をカンマで区切って記述する。各値の記法は、各アノテーションで定義されているメソッドの戻り値の型で決まる。たとえばこの場合valueという変数名はStringを戻り型にとるvalue()というメソッドと、intを戻り型にとるversion()というメソッドを持つ。フルアノテーションの場合は、defaultによりデフォルト値が設定されているアノテーション以外は、value = やversion = を省略することはできない。
@MyAnnotation(value = "abc", version = 2) class AnnotatedClass {}
アノテーションを定義するには、interfaceキーワードの接頭辞に@をつけて定義する。
マーカーアノテーションは以下のように定義する。メソッドやフィールドが一切ないマーカーインタフェースのアノテーション版ともいえる。@Override
や@Deprecated
がこれらのアノテーションに相当する。
public @interface MarkerAnnotation { }
単一値アノテーションは以下のように定義する。このアノテーションには少なくともメソッドがひとつだけ定義されている。単一値アノテーションのメソッド名にはvalueという名前をつけるのが儀礼である。
@interface Single { String value(); }
フルアノテーションは以下のように定義する。以下のように二つ以上のメソッドを定義する。
@interface FullAnnotation { String value(); int id(); }
メタアノテーションとは、定義しているアノテーションのみにつけられるアノテーションのことである。メタアノテーションの例としては@Target
や@Retention
、@Documented
、@Inherited
があり、これらはクラスやメソッドなどには使うことができず、アノテーションのみに使うことができる。アノテーションを定義するために使われるアノテーションということから、メタアノテーションと呼ばれる。
メタアノテーションを使ってアノテーションを定義するには、以下のように記述する。
@Retention(RetentionPolicy.SOURCE) @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD}) public @interface NewAnnotation { }
このとき、@Retention
は、新たにアノテーションNewAnnotationを作るとき、このアノテーション情報はソースコードのみにしか保存されないことを意味する。@Target
はこのアノテーションをどの型に使うことができるかを指定している。この場合、ANNOTATION_TYPEとMETHODを指定しているのでこのアノテーションはアノテーション型とメソッドにしか使うことができない。つまり、このNewAnnotationもまた、メソッドだけでなくアノテーションにも保存できるため、メタアノテーションとしても使えることを示している。
メタアノテーション@Retention
には以下のRetentionPolicy
列挙型を設定することができる。
RetentionPolicy名 | 説明 |
---|---|
RetentionPolicy.CLASS | アノテーション情報はコンパイル時に保存されるが実行時にはVMによって保持されない。 |
RetentionPolicy.RUNTIME | アノテーション情報はコンパイル時に保存され、実行時にもVMによって保持される。 |
RetentionPolicy.SOURCE | アノテーション情報はコンパイル時に破棄される。ソースコード内のみで有効。 |
メタアノテーション@Target
には以下のElementType
列挙型を設定することができる。これは配列を使って@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE})と複数指定することができる。ただし、同じ値を{}内で複数使用するとエラーとなる。これによって型を指定することで、そのアノテーションが、どの型に対して使うことができるのかを指定できる。
ElementType名 | 説明 |
---|---|
ElementType.ANNOTATION_TYPE | アノテーション型に指定できることを示す。 |
ElementType.CONSTRUCTOR | コンストラクタに指定できることを示す。 |
ElementType.LOCAL_VARIABLE | ローカル変数に指定できることを示す。 |
ElementType.FIELD | フィールドに指定できることを示す。 |
ElementType.METHOD | メソッドに指定できることを示す。 |
ElementType.PACKAGE | パッケージに指定できることを示す。 |
ElementType.PARAMATER | メソッド引数に指定できることを示す。 |
ElementType.TYPE | クラス、またはインタフェース(アノテーション型を含む)、enum型に指定できることを示す。 |
この「アノテーション」はコンピュータに関連した書きかけ項目です。この記事を加筆して下さる協力者を求めています(PJ コンピュータ / Portal:コンピュータ)。 |
この「アノテーション」は、生物学に関連した書きかけ項目です。この記事を加筆・訂正などしてくださる協力者を求めています(プロジェクト:生命科学/Portal:生物学)。 |
This article may require cleanup to meet Wikipedia's quality standards. No cleanup reason has been specified. Please help improve this article if you can. (April 2010) |
An annotation is a note that is made while reading any form of text. This may be as simple as underlining or highlighting passages. Annotated bibliographies give people a source that is useful to an author in constructing a paper or argument. Creating these comments, usually a few sentences long, establishes a summary for and expresses the relevance of each source prior to writing. The term also has a "special" is High.
Contents
|
In programming, annotations at one time were used mainly for the purpose of expanding code documentation and comments. They were typically ignored when the code is compiled or executed. Today (mid-2012), annotations have been greatly expanded in some languages (such as Java) and by frameworks built on top of the languages (such as Spring) so they can add significant runtime features to an application. There are annotations for things such as making objects automatically (sort of) storable in a database, for making objects cachable or for asserting multi-threading behavior of code.
Not only code but text manipulated by a program can be annotated; e.g. A markup language (such as XML or HTML) is a modern system for annotating a text in a way that is syntactically distinguishable from that text.
A special case is the Java programming language, where annotations can be used as a special form of syntactic metadata in the source code.[1] Classes, methods, variables, parameters and packages may be annotated. The annotations can be embedded in class files generated by the compiler and may be retained by the Java virtual machine and thus influence the run-time behaviour of an application. It is possible to create meta-annotations out of the existing ones in Java, which makes this concept more sophisticated than in other languages like C#.[2]
Annotate aka Blame or Praise is a function used in source control systems such as Team Foundation Server and Subversion to determine who committed changes to the source code into the repository. A person, who is annotated, is blamed for committing changes to the source code into the repository which caused the program to fail or behave in an unintended fashion.
Since the 1980s, molecular biology and bioinformatics have created the need for DNA annotation. DNA annotation or genome annotation is the process of identifying the locations of genes and all of the coding regions in a genome and determining what those genes do. An annotation (irrespective of the context) is a note added by way of explanation or commentary. Once a genome is sequenced, it needs to be annotated to make sense of it.
For DNA annotation, a previously unknown sequence representation of genetic material is enriched with information relating genomic position to intron-exon boundaries, regulatory sequences, repeats, gene names and protein products. This annotation is stored in genomic databases as Mouse Genome Informatics, FlyBase, and WormBase. Educational materials on some aspects of biological annotation from this year's Gene Ontology annotation camp and similar events are available at the Gene Ontology website.
The National Center for Biomedical Ontology (www.bioontology.org) develops tools for automated annotation of database records based on the textual descriptions of those records.
As a general method, dcGO [3] has an automated procedure for statistically inferring associations between ontology terms and protein domains or combinations of domains from the existing gene/protein-level annotations.
In the digital imaging community the term annotation is commonly used for visible metadata superimposed on an image without changing the underlying master image, such as sticky notes, virtual laser pointers, circles, arrows, and black-outs (cf. redaction).
In the United States, legal publishers such as Thomson West and Lexis Nexis publish annotated versions of statutes, providing information about court cases that have interpreted the statutes. Both the federal United States Code and state statutes are subject to interpretation by the courts, and the annotated statutes are valuable tools in legal research.
In linguistics, annotation include comments and metadata; these non-transcriptional annotations are also non-linguistic. A collection of texts with linguistic annotations is known as a corpus (plural corpora). The Linguistic Annotation Wiki describes tools and formats for creating and managing linguistic.
Look up annotation in Wiktionary, the free dictionary. |
全文を閲覧するには購読必要です。 To read the full text you will need to subscribe.
リンク元 | 「注解」「gloss」「commentary」「annotate」「注釈づけ」 |
拡張検索 | 「genome annotation」 |
.