Triple Edge — тип Edge для представления связей/свойств в форме (Subject, Property, Object).

Двухрежимная архитектура

  • Базовый режим (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 TID16TID этого Edge
Subject TID16TID подлежащего Entity/Node
Object TID16TID дополнения Entity/Node/Quantity

Расширенный режим (5 слов = 80 бит)

Если PropCode = 63, в 3-м слове добавляется 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)

Свойства отобраны на основе частоты использования в Wikidata.

Классификация/тип (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, ...)  │
│  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 слова

Расширенный режим: «Высота Эйфелевой башни — 330 м»

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
        }