wikidata 数据结构 关系型数据库

wikidata 数据结构

1 wikidata中的值类型

Wikidata_model_Elements_UML.png

2 Entity的三种类型

2.1 Item的顶级字段

Q31.json下载
https://pan.baidu.com/s/14K7d-9xy7xNUO3AzUEGr0A cvg7

type

​ 实体类型, str(字符串), 值有 item, property, datatype

id

​ 实体编号, str

labels

​ 实体的名称,多语言, KV(键值对)类型

{'labels': {'zh-sg': {'language': 'zh-sg', 'value': '比利时'}, ......}}
descriptions

​ 实体的描述, 多语言, KV

{'descriptions': {'zh-cn': {'language': 'zh-cn', 'value': '西欧国家'}, ......}}
aliases

​ 实体的别名, 多语言, KV+List

​ 一个实体在一种语言中可能有多个说法, 例如 “比利时” 在法语中:

{
    'aliases': [

        {
            'language': 'fr',
            'value': 'Royaume de Belgique'
        },

        {
            'language': 'fr',
            'value': 'BE'
        },

        {
            'language': 'fr',
            'value': '🇧🇪'
        },

        {
            'language': 'fr',
            'value': 'Belgique'
        },

        {
            'language': 'fr',
            'value': 'le Royaume de Belgique'
        }

    ]
}
claims

​ 实体的各属性, 多层 KV + List,[具体分析](#4. claims 字段分析)

sitelinks

​ 实体相关的链接如维基百科、维基语录和维基新闻等链接,多层KV

{
    'sitelinks': {

        'zhwikinews': {
            'site': 'zhwikinews',

            'title': 'Category:比利時',

            'badges': []

        },
        ......
    }
}
lastrevid

​ 版本号, int(整型),如 1254646632

2.2 wikidata官方数据模型展示

Datamodel_in_Wikidata.svg.png

2.3 wikidata 数据模型详细分析(Entity:item:Q31)

wikidata_model.png

2.4 claims 字段分析

​ claims是一个以属性id为key,描述属性的值为value的键值对

{
    'claims': [{
        'P1082': [{
            'mainsnak': {
                'snaktype': 'value',
                'property': 'P1082',
                'datavalue': { ... },
                'datatype': 'quantity'
            },
            'type': 'statement',
            'qualifiers': [{
                'snaktype': 'value',
                'property': 'P585',
                'datavalue': { ... },
                'datatype': 'time',
                'hash': '489481dca5f5660d9fe15875b4dc94a57389e4bd'
            }],
            'qualifiers-order': [],
            'id': 'Q31$XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
            'rank': 'normal',
            'references': [{
                'hash': '9b216970abe8fb8f730ebadbbfecc1b19d17c900',
                'snak': {
                    'P123': [{
                        'snaktype': 'value',
                        'property': 'P123',
                        'datavalue': { ... },
                        'datatype': 'wikibase-item'
                    }],
                    'P585': [{
                        'snaktype': 'value',
                        'property': 'P585',
                        'datavalue': { ... },
                        'datatype': 'time'
                    }]
                },
                'snaks-order': ['P123', 'P585']
            }]
        }]
    }]
}

claims statement.png

claims是一个属性字典(键值对类型)

一个属性P0000中可能有多个描述的值,例如比利时性质

'P31': ['主权国家', '联邦制', '国家', ......]


Q31_P31.jpg

P31属性中每一项的具体值在mainsnak

qualifiers是对属性的限定

qualifiers是对P31属性的限定属性的排序

id可唯一标识当前描述P31的全部属性,包括mainsnakqualifiersreferences

rank是当前属性P31的排序优先级,preferred为优先排序,normal为按顺序展示

references表示mainsnak引用自哪里

P31_summey.jpg

2.2 property的顶级字段

​ P19.json下载
https://pan.baidu.com/s/14K7d-9xy7xNUO3AzUEGr0A cvg7

​ 相对于item,没有sitelinks,替换为datatype,其余字段不变

P19属性顶级字段

2.3 datatype的顶级字段

​ datatype类型实体不存在于wikidata-20200817-all.json文件中
wikidata 数据类型解释

3 实体关系分析

​ 顶级属性labelsaliasesdescriptionssitelinks直接多对一关联到id建表存储

​ 例:labels

labels_id q_id language value
1 Q31 zh 比利时
2 Q31 zh-hk 比利時

​ 其他顶级属性同理

3.1 claims属性内关系分析

snak.png

mainsnakqualifiersreferences中均有相同属性,应将这四种属性存在一张表内,由他们引用。

而一个qualifiers包含多个qualifierreferences包含多个reference,所以他们应构成一对多关系。

3.2 claims中属性 E-R 图

snak中的datavalue存储的就是属性的值,最终的值一般是stringint类型,没有再进行更细致的分析。若解析datavalue则需要找到对应的datatype类型进行解析,这里就当做一个非常长的字符串存储进数据库。

wikidata_model_1.png

3.3 当前E-R图中的问题及优化

问题:

1、 太多的主外键关系会影响查询速度
2 、snaks表中的datavalue字段是text类型严重影响查询速度
3、关联查询效率太低,如查询claims对应的qualifiers将是全表查询:
SELECT * FROM qualifiers qu LEFT JOIN claims c WHERE qu.cid = c.cid;
解决办法:
1、id可唯一标识当前描述P31的全部属性,包括mainsnakqualifiersreferences,直接用id作为这三张表的主键即可。在数据库中不创建外键约束,由上层程序保证约束完整性。
2、最好将datavalue继续拆分为粒度更细的字段存储,或者将datavalue单独存储在一张表中,需要使用时在进行查找。
3、给qualifierscid字段增加 BTREE 索引,效率提升100倍。

3.4 优化后的 E-R 图

图中的主外键关系均为逻辑关系,不存在数据库中,仅靠上层程序保证主外键完整性。

wikidata_model_optimize.png

wikidata Navicat 模型文件下载
链接:https://pan.baidu.com/s/19oHW2LglBIniZ2oSWBDo3g
提取码:c6pv

欢迎mark,每天更新

单个实体下载

https://www.wikidata.org/wiki/Special:EntityData/Q31.json

参考文献

  1. wikidata数据模型
  2. wikidata中文简介
  3. item Q31 wikidata数据官方展示
  4. property P19 wikidata数据官方展示
  5. wikidata datatype
  6. wikidata 数据统计
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343