Triple Edge est un type d’Edge qui exprime les relations et proprietes sous la forme (Subject, Property, Object).

Conception en double mode

  • Mode de base (4 mots) : PropCode 0~62 (Top 63 proprietes)
  • Mode etendu (5 mots) : Si PropCode=63, couvre l’integralite des P-ID (16 bits a alignement semantique)

Mode de base (4 mots = 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)
ChampBitsDescription
Prefix101100 000 001
PropCode60~62 : Top 63 proprietes, 63 : mode etendu
Edge TID16TID de cet Edge
Subject TID16TID de l’entite/noeud sujet
Object TID16TID de l’entite/noeud/quantite objet

Mode etendu (5 mots = 80 bits)

Si PropCode vaut 63, un P-ID de 16 bits est ajoute dans le 3e mot.

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

Top 63 proprietes (PropCode 0~62)

Proprietes selectionnees sur la base de la frequence d’utilisation dans Wikidata.

Classification/Type (Code 0~7)

CodeP-IDNom de proprieteDescription
0P31instance ofInstance de ~
1P279subclass ofSous-classe de ~
2P361part ofPartie de ~
3P527has partContient ~
4P1552has qualityPropriete/caracteristique
5P460same asIdentique
6P1889different fromDifferent
7P156followed bySuivi par

Espace/Localisation (Code 8~15)

CodeP-IDNom de proprieteDescription
8P17countryPays
9P131located inLocalisation (division administrative)
10P276locationLocalisation (lieu)
11P625coordinateCoordonnees
12P30continentContinent
13P36capitalCapitale
14P150containsContient (region)
15P206located next toPlan d’eau adjacent

Temps (Code 16~23)

CodeP-IDNom de proprieteDescription
16P569date of birthDate de naissance
17P570date of deathDate de deces
18P571inceptionDate de fondation
19P576dissolvedDate de dissolution
20P577publication dateDate de publication
21P580start timeDebut
22P582end timeFin
23P585point in timeMoment precis

Informations personnelles (Code 24~31)

CodeP-IDNom de proprieteDescription
24P19place of birthLieu de naissance
25P20place of deathLieu de deces
26P21sex or genderSexe/genre
27P27citizenshipNationalite
28P735given namePrenom
29P734family nameNom de famille
30P1559name in native languageNom en langue maternelle
31P742pseudonymPseudonyme

Relations/Affiliations (Code 32~39)

CodeP-IDNom de proprieteDescription
32P22fatherPere
33P25motherMere
34P26spouseConjoint
35P40childEnfant
36P3373siblingFrere/soeur
37P463member ofMembre de
38P108employerEmployeur
39P1027conferred byDecerne par

Profession/Activite (Code 40~47)

CodeP-IDNom de proprieteDescription
40P106occupationProfession
41P39position heldFonction occupee
42P69educated atFormation
43P101field of workDomaine
44P1344participant inParticipation (evenement)
45P166award receivedRecompense
46P800notable workOeuvre notable
47P1412languages spokenLangues parlees

Medias/Identification (Code 48~55)

CodeP-IDNom de proprieteDescription
48P18imageImage
49P154logoLogo
50P41flag imageDrapeau
51P373Commons categoryWikimedia
52P856official websiteSite officiel
53P214VIAF IDVIAF
54P227GND IDGND
55P213ISNIISNI

Oeuvres/Creation (Code 56~62)

CodeP-IDNom de proprieteDescription
56P50authorAuteur
57P57directorRealisateur
58P86composerCompositeur
59P175performerInterprete
60P136genreGenre
61P364original languageLangue originale
62P123publisherEditeur

Le code 63 est reserve comme indicateur du mode etendu.

Resume PropCode

┌─────────────────────────────────────────────┐
│  0~7:   Classification/Type (P31, P279, ...)│
│  8~15:  Espace/Localisation (P17, P131, ...)│
│  16~23: Temps (P569, P570, ...)             │
│  24~31: Info personnelles (P19, P20, ...)   │
│  32~39: Relations/Affiliations (P22, P25,..)│
│  40~47: Profession/Activite (P106, P39, ...)│
│  48~55: Medias/Identification (P18, P856,..)│
│  56~62: Oeuvres/Creation (P50, P57, ...)    │
├─────────────────────────────────────────────┤
│  63: Indicateur du mode etendu              │
└─────────────────────────────────────────────┘

Exemples

Mode de base : “Apple est une entreprise”

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

Total: 4 mots

Mode etendu : “La hauteur de la tour Eiffel est 330m”

P2048 (height) → Hors Top 63 → Mode etendu

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

Total: 5 mots

Analyse syntaxique

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:
        # Mode de base (4 mots)
        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:
        # Mode etendu (5 mots)
        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
        }