Triple Edge は (Subject, Property, Object) 形式の関係/属性を表現する Edge タイプである。

二重モード設計

  • 基本モード(4ワード): PropCode 0~62(Top 63 属性)
  • 拡張モード(5ワード): PropCode=63で全 P-ID をカバー(意味整列16ビット)

基本モード(4ワード = 64ビット)

1st WORD (16ビット)
┌────────────────────┬────────────────────┐
│      Prefix        │     PropCode       │
│      10bit         │       6bit         │
└────────────────────┴────────────────────┘

2nd WORD: Edge TID (16ビット)
3rd WORD: Subject TID (16ビット)
4th WORD: Object TID (16ビット)
フィールドビット説明
Prefix101100 000 001
PropCode60~62: Top 63 属性, 63: 拡張モード
Edge TID16この Edge の TID
Subject TID16主語 Entity/Node TID
Object TID16目的語 Entity/Node/Quantity TID

拡張モード(5ワード = 80ビット)

PropCode が63の場合、3rdワードに16ビット P-ID が追加される。

1st WORD: [Prefix 10bit] + [PropCode=63 6bit]
2nd WORD: Edge TID (16ビット)
3rd WORD: P-ID 意味整列 (16ビット)
4th WORD: Subject TID (16ビット)
5th WORD: Object TID (16ビット)

Top 63 属性(PropCode 0~62)

ウィキデータ使用頻度に基づき選定された属性。

分類/タイプ(Code 0~7)

CodeP-ID属性名説明
0P31instance of~のインスタンス
1P279subclass of~の下位クラス
2P361part of~の部分
3P527has part~を含む
4P1552has quality属性/特性
5P460same as同一
6P1889different from異なる
7P156followed by後続

空間/位置(Code 8~15)

CodeP-ID属性名説明
8P17country
9P131located in位置(行政区域)
10P276location位置(場所)
11P625coordinate座標
12P30continent大陸
13P36capital首都
14P150contains含む(地域)
15P206located next to隣接水域

時間(Code 16~23)

CodeP-ID属性名説明
16P569date of birth生年月日
17P570date of death没年月日
18P571inception設立日
19P576dissolved解散日
20P577publication date発表日
21P580start time開始時点
22P582end time終了時点
23P585point in time時点

人物基本(Code 24~31)

CodeP-ID属性名説明
24P19place of birth出生地
25P20place of death死亡地
26P21sex or gender性別
27P27citizenship国籍
28P735given name
29P734family name
30P1559name in native language本名
31P742pseudonym筆名/芸名

関係/所属(Code 32~39)

CodeP-ID属性名説明
32P22father
33P25mother
34P26spouse配偶者
35P40child
36P3373sibling兄弟姉妹
37P463member of所属
38P108employer雇用主
39P1027conferred by授与機関

職業/活動(Code 40~47)

CodeP-ID属性名説明
40P106occupation職業
41P39position held職位
42P69educated at学歴
43P101field of work分野
44P1344participant in参加(イベント)
45P166award received受賞
46P800notable work代表作
47P1412languages spoken使用言語

メディア/識別(Code 48~55)

CodeP-ID属性名説明
48P18image画像
49P154logoロゴ
50P41flag image国旗/旗
51P373Commons categoryウィキメディア
52P856official website公式ウェブサイト
53P214VIAF IDVIAF
54P227GND IDGND
55P213ISNIISNI

作品/創作(Code 56~62)

CodeP-ID属性名説明
56P50author著者
57P57director監督
58P86composer作曲家
59P175performer演奏者/歌手
60P136genreジャンル
61P364original language原語
62P123publisher出版社

Code 63 は拡張モード表示子として予約されている。

PropCode まとめ

┌─────────────────────────────────────────────┐
│  0~7:   分類/タイプ (P31, P279, ...)        │
│  8~15:  空間/位置 (P17, P131, ...)          │
│  16~23: 時間 (P569, P570, ...)              │
│  24~31: 人物基本 (P19, P20, ...)            │
│  32~39: 関係/所属 (P22, P25, ...)           │
│  40~47: 職業/活動 (P106, P39, ...)          │
│  48~55: メディア/識別 (P18, P856, ...)      │
│  56~62: 作品/創作 (P50, P57, ...)           │
├─────────────────────────────────────────────┤
│  63: 拡張モード表示子                        │
└─────────────────────────────────────────────┘

基本モード:「Appleは企業である」

P31 (instance of) → PropCode = 0

Triple Edge:
  1st: [1100 000 001] + [000000]  - Prefix + PropCode 0
  2nd: [TID: 0x0101]              - Edge TID
  3rd: [TID: 0x0010]              - Apple (Subject)
  4th: [TID: 0x0020]              - 企業 (Object)

合計: 4ワード

拡張モード:「エッフェル塔の高さは330m」

P2048 (height) → Top 63 外 → 拡張モード

Triple Edge:
  1st: [1100 000 001] + [111111]  - Prefix + Ext(63)
  2nd: [TID: 0x0102]              - Edge TID
  3rd: [0xA800]                   - P2048 意味整列
  4th: [TID: 0x0030]              - エッフェル塔 (Subject)
  5th: [TID: 0x0050]              - 330m Quantity (Object)

合計: 5ワード

パース

def parse_triple_edge(data: bytes) -> dict:
    word1 = int.from_bytes(data[0:2], 'big')

    prefix = word1 >> 6
    assert prefix == 0b1100000001, "Not Triple Edge"

    prop_code = word1 & 0x3F

    if prop_code < 63:
        # 基本モード (4ワード)
        return {
            'mode': 'basic',
            'prop_code': prop_code,
            'edge_tid': int.from_bytes(data[2:4], 'big'),
            'subject_tid': int.from_bytes(data[4:6], 'big'),
            'object_tid': int.from_bytes(data[6:8], 'big'),
            'words': 4
        }
    else:
        # 拡張モード (5ワード)
        return {
            'mode': 'extended',
            'p_id': int.from_bytes(data[4:6], 'big'),
            'edge_tid': int.from_bytes(data[2:4], 'big'),
            'subject_tid': int.from_bytes(data[6:8], 'big'),
            'object_tid': int.from_bytes(data[8:10], 'big'),
            'words': 5
        }