Triple Edge é um tipo de Edge que expressa relações/propriedades no formato (Subject, Property, Object).

Design de modo dual

  • Modo básico (4 palavras): PropCode 0~62 (Top 63 propriedades)
  • Modo estendido (5 palavras): Se PropCode=63, cobre todo o P-ID (16 bits de alinhamento semântico)

Modo básico (4 palavras = 64 bits)

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

2nd WORD: Edge TID (16 bits)
3rd WORD: Subject TID (16 bits)
4th WORD: Object TID (16 bits)
CampoBitsDescrição
Prefix101100 000 001
PropCode60~62: Top 63 propriedades, 63: modo estendido
Edge TID16TID deste Edge
Subject TID16TID de Entity/Node sujeito
Object TID16TID de Entity/Node/Quantity objeto

Modo estendido (5 palavras = 80 bits)

Se PropCode for 63, adiciona-se um P-ID de 16 bits na 3.ª palavra.

1st WORD: [Prefix 10bit] + [PropCode=63 6bit]
2nd WORD: Edge TID (16 bits)
3rd WORD: P-ID alinhamento semântico (16 bits)
4th WORD: Subject TID (16 bits)
5th WORD: Object TID (16 bits)

Top 63 propriedades (PropCode 0~62)

Propriedades selecionadas com base na frequência de uso no Wikidata.

Classificação/tipo (Code 0~7)

CodeP-IDPropriedadeDescrição
0P31instance ofInstância de ~
1P279subclass ofSubclasse de ~
2P361part ofParte de ~
3P527has partContém ~
4P1552has qualityPropriedade/característica
5P460same asIgual
6P1889different fromDiferente
7P156followed bySeguinte

Espaço/localização (Code 8~15)

CodeP-IDPropriedadeDescrição
8P17countryPaís
9P131located inLocalização (divisão administrativa)
10P276locationLocalização (lugar)
11P625coordinateCoordenadas
12P30continentContinente
13P36capitalCapital
14P150containsContém (região)
15P206located next toCorpo de água adjacente

Tempo (Code 16~23)

CodeP-IDPropriedadeDescrição
16P569date of birthData de nascimento
17P570date of deathData de falecimento
18P571inceptionData de fundação
19P576dissolvedData de dissolução
20P577publication dateData de publicação
21P580start timeMomento de início
22P582end timeMomento de fim
23P585point in timeMomento específico

Informação pessoal (Code 24~31)

CodeP-IDPropriedadeDescrição
24P19place of birthLocal de nascimento
25P20place of deathLocal de falecimento
26P21sex or genderSexo ou género
27P27citizenshipCidadania
28P735given nameNome próprio
29P734family nameApelido
30P1559name in native languageNome nativo
31P742pseudonymPseudónimo

Relações/pertença (Code 32~39)

CodeP-IDPropriedadeDescrição
32P22fatherPai
33P25motherMãe
34P26spouseCônjuge
35P40childFilho/a
36P3373siblingIrmão/ã
37P463member ofMembro de
38P108employerEmpregador
39P1027conferred byConferido por

Ocupação/atividade (Code 40~47)

CodeP-IDPropriedadeDescrição
40P106occupationOcupação
41P39position heldCargo
42P69educated atEducação
43P101field of workÁrea de trabalho
44P1344participant inParticipação (evento)
45P166award receivedPrémio recebido
46P800notable workObra notável
47P1412languages spokenIdiomas falados

Media/identificação (Code 48~55)

CodeP-IDPropriedadeDescrição
48P18imageImagem
49P154logoLogo
50P41flag imageBandeira
51P373Commons categoryWikimedia
52P856official websiteSite oficial
53P214VIAF IDVIAF
54P227GND IDGND
55P213ISNIISNI

Obras/criação (Code 56~62)

CodeP-IDPropriedadeDescrição
56P50authorAutor
57P57directorRealizador
58P86composerCompositor
59P175performerIntérprete
60P136genreGénero
61P364original languageIdioma original
62P123publisherEditora

Code 63 está reservado como indicador de modo estendido.

Resumo do PropCode

┌─────────────────────────────────────────────┐
│  0~7:   Classificação/tipo (P31, P279, ...) │
│  8~15:  Espaço/localização (P17, P131, ...) │
│  16~23: Tempo (P569, P570, ...)             │
│  24~31: Info. pessoal (P19, P20, ...)       │
│  32~39: Relações/pertença (P22, P25, ...)   │
│  40~47: Ocupação/atividade (P106, P39, ...) │
│  48~55: Media/identificação (P18, P856, ..) │
│  56~62: Obras/criação (P50, P57, ...)       │
├─────────────────────────────────────────────┤
│  63: Indicador de modo estendido            │
└─────────────────────────────────────────────┘

Exemplos

Modo básico: “A Apple é uma empresa”

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]              - Empresa (Object)

Total: 4 palavras

Modo estendido: “A altura da Torre Eiffel é 330m”

P2048 (height) → Fora do Top 63 → Modo estendido

Triple Edge:
  1st: [1100 000 001] + [111111]  - Prefix + Ext(63)
  2nd: [TID: 0x0102]              - Edge TID
  3rd: [0xA800]                   - P2048 alinhamento semântico
  4th: [TID: 0x0030]              - Torre Eiffel (Subject)
  5th: [TID: 0x0050]              - 330m Quantity (Object)

Total: 5 palavras

Análise (parsing)

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:
        # Modo básico (4 palavras)
        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:
        # Modo estendido (5 palavras)
        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
        }