Testwiki:Data model/ja
<languages/> Template:Information page
WikidataではTemplate:Wikipediaをデータ項目Template:Anchor(data item)として表現します(例、Template:QとTemplate:Qはデータ項目です)。 データ項目についての知識は文Template:Anchor(statement)によって表現され、その基本構造は「主語」「述語」「目的語」から成ります。 たとえば、Template:Statement.
- 文の主語(subject)はふつうデータ項目で、この場合にはTemplate:Qです。
- 文の述語(predicate)は常にプロパティで、この場合はTemplate:Pです。
- 文の目的語(object)は、プロパティごとの「データ型」の値で、この場合には項目であるTemplate:Qです。
文で使用されているプロパティは、文の意味(たとえば主語と目的語との関係の性質)と、データ型(data type)で指定されるどんな値が使用できるか、の両方を規定します。
たとえば上に示した例ではTemplate:Pプロパティを使っていますが、その値はデータ型がTemplate:Datatypeでなければならず、そのため文の目的語にはデータ項目が設定されます(この例ではTemplate:Q)。
他のデータ型を持つプロパティの例としてTemplate:Pがあり、その値はデータ型がTemplate:Datatypeでなければならず、そのためある時点を述べることしかできません。
Template:Anchor Wikidataでは文をさらに別のプロパティで修飾することができ、こうしたプロパティはTemplate:Llと呼ばれます。たとえば、Template:Statementと述べることができます。
このページにある情報は、Wikidataへの投稿やWikidataの利用には必要ではありません。 Wikidataでの投稿や利用については、Template:Ll と Template:Ll のページを参照してください。
データモデルの3つのレベル
WikidataはTemplate:Llソフトウェアを利用しています。 WikibaseではTemplate:Dataのデータ型が定義されていますが、そのままではTemplate:Llは1つもありません。 しかしWikidataには[[Special:ListProperties|Template:Pages in namespaceのプロパティ]]があり、これらはWikidataのためにWikidata自身において定義されています。 (すごく大きな数ですが、このうちExpression error: Unrecognized punctuation character "[".%はTemplate:Llであり、項目を他のデータベースにリンクするためのものです。)
Wikidataにおいて「Template:Wikipedia」というとき、実際には次の3つのいずれかを指しています。
- Wikibaseソフトウェアのデータモデル(単純なセマンティックトリプルよりも多少手の込んだもの[1])
- Wikibaseのデータモデルの上にWikidataが構築した基礎的データモデルで、Template:P、Template:P、Template:Pといった主要プロパティを含むもの
- トピック特異的なデータモデル(たとえばTemplate:Qのインスタンスには、プロパティとしてTemplate:PとTemplate:Pがある)
この3種のデータモデルについてはそれぞれ別のページで説明されています。
- Wikibaseソフトウェアのデータモデルについては、mediawiki.orgにある仕様書に技術的な説明が、手引きにより分かり易い説明があります
- Wikidataの基礎的データモデルは厳密には定義されていませんが、このページで説明を試みています
- 様々なトピック特異的なデータモデルについては、Template:Pによっておおまかに記述されており、より形式的にはエンティティスキーマにより記述されます。
Wikidataにはデータをどのようにモデル化するかを決定する中央集権的な当局がなく、公の議論を通してTemplate:Llが共同して決定するということに注意してください。 Wikidataのデータモデルは時間と共に進歩してきたもので、現在も進歩の途上にあります。新しいデータ型が導入され、新たなプロパティが提案され作成され、問題のあるプロパティが非推奨となり、プロパティ制約やエンティティスキーマによってプロパティがどのような意味を持つかをより良く記述するための努力が継続しています。
Wikibaseのデータモデル
Template:Properties by datatype
WikidataのデータモデルはTemplate:Llのデータモデルに基づいており、仕様書に技術的な説明が、手引きにより分かり易い説明があります。
Wikidataは拡張機能によってWikibaseデータモデルを拡張しています。もっとも有名なのはWikibaseLexemeで、Template:LlのためにWikibaseLexemeデータモデルで説明されているように3つのエンティティタイプ(「語彙素」(Lexeme)、「語形」(Form)、「語義」(Sense))を追加します。WikidataではWikibaseにデータ型をさらに追加するためいくつの拡張機能をつかっており、それはTemplate:Llに記述されています。
データ型
Wikidataのデータ型はTemplate:Llで記述されていて、Special:ListDatatypesに一覧があります。 Wikidataは以下の3つの拡張機能によってWikibaseのデータ型を拡張しています。
- WikibaseLexemeは、追加導入されたエンティティタイプに対応するTemplate:Datatype、Template:Datatype、Template:Datatypeのデータ型を追加します。
- MathはTemplate:Llを追加します。
- ScoreはTemplate:Llを追加します。
これはWikibaseのデータ型が拡張可能であるため可能になっています。 さらなるデータ型の導入はPhabricatorで提案できます。
WikibaseデータモデルにはJSONによる正準表現があり、 Template:Llで詳しく説明されています。
データ型によっては制限もあることに注意してください。それはTemplate:Llに一覧されています。
またTemplate:DatatypeとTemplate:Datatypeには意味論上明確な差がないことに注意してください ... 文字列プロパティが外部識別子であることもありますし、Template:Pは両方に対して機能します。
ランク
Wikibaseのすべての文には3つ(「標準」(normal)、「非推奨」(deprecated)、「推奨」(preferred))のうち1つのランクがあります。これらランクの意味についてはTemplate:Llを参照してください。
「値なし」と「不明な値」
- Template:Statement そのような値が存在しないことを意味します (≡ ¬∃ X (Template:Statement))
- Template:Statement 以下のいずれかを意味します
- かつては分かっていた値が時とともに失われてしまった (e.g. Template:Statement)
- 正確な値が分かっていたことはないし今後分かることもおそらくない (e.g. Template:Statement)
- 文を作成したWikidata投稿者は値が存在することを知っているが、値自体を知らない
- 値は既知のオブジェクトだが、Wikidataにそのオブジェクトの項目がない(おそらくそれほど特筆性がないため)。
値の順序
Wikibaseは値を常に特定の順序(デフォルトでは挿入された順)で格納していますが、一般論として値の順序はいかなる意味も暗示しません。 そのかわり、意味上の順序は修飾子で表現されます。たとえば
- Template:Pの値の順序をTemplate:Pで修飾する、例:Template:St
- Template:Pの値をTemplate:Pのような時刻に基づく修飾子で修飾する
修飾子で表現される順序が、ユーザーインターフェースやAPIにおける値の順序と一致しているとは限らないことに注意してください。こうしたインターフェースは単に直列化された際の順序で値を返しているだけで、それは修飾子で表現される意味上の順序と一致したりしなかったりするからです。[2]
基礎的エンティティ
Wikidataの基礎的なプロパティについてはTemplate:Llで説明されています。
詳しいことについて、あるいはWikidataのTemplate:Wikipediaに関心がある方は、Ontology WikiProjectを参照してください。
基礎的プロパティ
注: この節では読者がTemplate:Wikipediaに馴染みがあることを前提としており、より平易な説明についてはTemplate:Llを参照してください。 Wikidataにおける3つのおそらく最も重要なプロパティは、RDF Schema仕様に記載されているTemplate:Wikipediaに基づいています。
- Template:Pはrdf:typeに相当します
- Template:Pはrdfs:subClassOfに相当します
- Template:Pはrdfs:subPropertyOfに相当します
これらのプロパティには以下の意味があります
- Template:Statement ∧ Template:Statement ⇒ Template:Statement
- Template:Statement ∧ Template:Statement ⇒ Template:Statement
Template:PとTemplate:Pはどちらも推移的プロパティであることに注意してください。
もう1つの重要なプロパティはTemplate:Pで、これはowl:inverseOfに相当し以下のような意味を持ちます。
修飾子の制限性
Template:Llは制限的または非制限的のいずれかです。 制限的な修飾子は文の意味やスコープを変化させるため、データ利用者がWikidataの文を正しく解釈するために考慮する必要があります。 これに対し、非制限的な修飾子はただ追加情報を加えるだけなので、文の意味やスコープを変化させることなく安全に無視することができます。
制限的な修飾子の例
- 文が適用される場所を制限する修飾子(例:Template:PやTemplate:P)
- 文がTemplate:Quickqueryを制限する修飾子(例:Template:PやTemplate:P)
- 文の適用される方法を限定する修飾子(例:Template:Statement)
プロパティが修飾子として使われた時の制限性は、現状ではTemplate:StatementとTemplate:Statementで表現されています (いつもどおりTemplate:Pの推移性を考慮に入れる必要があります)。
残念ながら、修飾子として使った際に制限的であったり非制限的であったりする明確でないプロパティもあるので、修飾子プロパティは4つのカテゴリに分類することができます。
- 修飾子として使った際にTemplate:Quickquery
- 修飾子として使った際にTemplate:Quickquery
- 修飾子として使った際にTemplate:Quickquery
- 修飾子として使った際に制限性について分類することができないプロパティ
否定
WikibaseにはTemplate:Wikipediaの組み込みサポートがなく、そのため否定は別個のプロパティとして表現する必要があります。 たとえばTemplate:Pの否定はTemplate:Pです。 このような否定プロパティはTemplate:Quickqueryに対してのみ存在しています。 新たな否定プロパティの必要が出てきたら、Template:Ll。
否定プロパティの意味論はTemplate:Pで次のように表現できます。
- Template:Statement ∧ Template:Statement ⇒ ¬∃ Template:Statement もし双方の文に同じTemplate:Llがあるか、まったくない場合
- Template:Statement ⇒ Template:Statement (Template:Pは対称的プロパティです。)
あるプロパティがなにかが存在しないことを表現しているかどうかは、現在Template:Statementで表されています。
オブジェクト指向プログラミングとの違い
Template:Wikipediaとは違って、あるエンティティがインスタンスでありかつクラスであることを妨げるものはありません。
また、あるエンティティは複数のクラスのインスタンスとなり得るし、複数のクラスのサブクラスにもなり得ます。
最後に、あるインスタンスが親クラスから全ての文を自動的に継承することを期待するかもしれませんが、Template:Llで説明されているとおり明示的に当てはまりません。
クラスの推測
プロパティには以下の意味があるTemplate:Pを指定できます。
クラスをTemplate:PやTemplate:Pを使って他のクラスのTemplate:WikipediaまたはTemplate:Wikipediaと定義することができます。その意味は以下の通りです。
以下のように定義したとき
クラスに以下の意味を持つTemplate:Pを指定できる。
- Template:Statement ∧ Template:Statement ⇒ classesOf(X) ∩ {S1, S2, ..., SN}| ≠ {}
クラスに以下の意味を持つTemplate:Pを指定できる。
- Template:Statement ∧ Template:Statement ⇒ |classesOf(X) ∩ {S1, S2, ..., SN}| = 1
継承
Template:Wikipediaに馴染みがある場合、あるクラスのインスタンスが、クラスの文を継承することを期待するかもしれません。 これは一般的には当てはまりません。たとえば、Template:StatementとTemplate:StatementというだけではTemplate:Statementという意味にはなりません。 しかし継承されるであろうプロパティもあります。
| プロパティ | 逆のプロパティ |
|---|---|
| Template:P | Template:P |
| Template:P | なし |
| Template:P | Template:P |
| Template:P | Template:P |
たとえばTemplate:StatementとTemplate:StatementでTemplate:Statementを正しく推論できます。
こうした推論をする場合には、Template:Llで説明されているように、ランク、Template:Ll、否定を忘れずに考慮してください。
この文は適用されるか?
ある特定の文が所与のエンティティに適用されるかどうかを判断するための概略を次に示します。
- Template:Ll文は適用されません。
- Template:Llがある文は、その制限的な修飾子にしたがう場合にのみ適用されます。
- いくつかのプロパティの文は継承されるはずです(Template:Llを参照)。ただしTemplate:Llで説明されているように、インスタンスや中間クラスにおいて親クラスから継承した文が否定されるかもしれません。
再帰的な文
Aがクラスの場合Template:Statementは意味が次のいずれなのか不明確になります。
- AのインスタンスがAのインスタンスとの間に関係Pを持つ(同じインスタンスかもしれないし違うインスタンスかもしれない)
- AのインスタンスがAの異なるインスタンスとの間に関係Pを持つ(同じインスタンスではない)
- Aのインスタンスが自身との間に関係Pを持つ
これらを区別するための修飾子プロパティを導入する提案についてTemplate:Ppsを参照してください。
書式指定用のプロパティ
WikidataにはTemplate:P、Template:P、Template:Pのような書式指定用のプロパティがあります。
こうしたプロパティの書式指定のやり方や、どのような値が生成されるのかについて、今のところ機械可読な方法では記述されていませんが、提案中のTemplate:Ppsプロパティが導入されれば変わるでしょう。
プロパティ制約
Wikidataではプロパティの誤用に対処するためにTemplate:Llを利用しています。 プロパティ制約はExtension:WikibaseQualityConstraintsにより実装されていて 2017年以降それぞれのプロパティでTemplate:Pを使って記述されています。 [3] こうしたプロパティ制約への違反はWikidataのユーザーインターフェース上に直接表示されます。
さらに複雑なプロパティ制約はTemplate:Llクエリとして実装しプロパティの議論ページにTemplate:Tlを用いて配置することができます。 こうした複雑なプロパティ制約に対する違反は、ボットによってCategory:Complex constraint violation reportsカテゴリの中に定期的に報告されます。
プロパティ制約についての詳細についてはTemplate:Llやproperty constraints WikiProjectを参照してください。
トピック特異的なデータモデル
Wikidataは、芸術、生物学、国、都市、記念物、映画、人物、ソフトウェア、ウェブサイト、文章など、多くのトピックを取り扱います。 こうしたトピックにおいてなんらかのTemplate:Ll全てのエンティティはTemplate:Llを伴うTemplate:Llとして表現される必要があります。 では特定のエンティティタイプにどんな文を作成し、それらの文にどんなプロパティを使用すればいいのでしょうか? こうした問いに対する答えは、特定のトピックに対して使用されるべき、トピック特異的なデータモデルの対象となります。 では所与のトピックに対してどのデータモデルを使うべきでしょうか?それは公の議論によってWikidataコミュニティが協力して決定します。 Wikidataにおける特定のトピックについての議論や努力はTemplate:Llで取りまとめられています。
トピック特異的なデータモデルはどこで見つけられるでしょうか?
- データ項目中のTemplate:Pの文
たとえばTemplate:Statementは、Template:Qのインスタンスには通常Template:Pプロパティの文があることを表現しています。 - 「データモデル」(「データ構造」「項目の構造」あるいは単に「モデル」と呼ばれることもあります)についてのページは、このカテゴリやこのテンプレートで見つけることができます。 [4]
- WikiProjectページのサブページ、例えば Template:Ll
- Template:LlはTemplate:Llで見つけることができます。たとえばTemplate:E
エンティティスキーマ
プロパティ制約に代わるアプローチとして、Template:Wikipediaデータモデリング言語が使用されています。
Wikidataではこうしたスキーマはwikidata.orgウィキのEntitySchema:*名前空間に格納することができます(これはMediaWiki拡張機能のEntitySchemaが実現しています)。
Wikidata用にこうしたスキーマを確立する努力はまさに途上であることに注意してください。
EntitySchemaデータタイプが実装されていないため、Shape Expression for classプロパティの提案は現在保留中になっています。[5]
Wikidataスキーマについての詳細情報はSchemas WikiProjectを参照してください。
関連項目
脚注
- ↑ 項目にはラベル、説明、別名、サイトリンクを付けることができ、文にはランクがあり修飾子や出典を付けることができ、値として「値なし」や「不明の値」を指定できる。
- ↑ Phabricator task T173432: Sort claims of a property in meaningful way
- ↑ Phabricator task T102759: Migrate constraints from property talk pages to statements on properties
- ↑ こうした多様性は将来的に標準化することができるでしょう
- ↑ Phabricator task T214884: linking Schemas in statements
Template:Translation categories [[Category:Wikidata{{#translation:}}]]