1

太差的文档让我在 mediawiki 和语义媒体wiki 中发疯。smw_object_ids 中的列子对象是什么意思?我如何才能找到与记录相关的内容,这些内容存储类似于_QUERYgjdfghjsag9u05sdfa上列指定的内容?

编辑

smw_proptable_hash 应该保存哪些数据?如果我反序列化,我会看到:

array (
  'smw_di_number' => '3acec8ed7529527ac33713b1668f31c2',
  'smw_di_blob' => 'c201d67c4b8317d31b05d38d796671d2',
  'smw_di_time' => 'eff3878694d4aee1e88eb979bbd30097',
  'smw_di_wikipage' => 'e474079e8c5fab4ec7197d6aaa884032',
  'smw_fpt_ask' => 'e721ae2cb8f49309e10a27467306644c',
  'smw_fpt_inst' => 'c7af3f2c8f2f5276c1284b3855358979',
  'smw_fpt_sobj' => '7fe51e1a5b9c41d770d3dd8b1e1a16fa',
  'smw_fpt_mdat' => 'a400d86be3f69fbb788c4cfcdddaf077',
  'smw_fpt_cdat' => 'd063996afa76760ea758a1ab13deb191',
)

但是我在指定的表格中找不到它们。

4

3 回答 3

1

好吧,我认为您不应该执行原始 SQL 查询来浏览语义数据,因为 SMW 已经有它的类和方法。虽然,它们几乎没有记录,因此您需要调查来源以了解它的工作原理以及如何正确使用它。

您可以通过查看SemanticQueryInterface的来源找到一些示例,或者由于它支持子对象,您可以在代码中使用它。

于 2017-02-22T15:14:21.557 回答
1

根据源代码

[`extensions/SemanticMediaWiki/includes/storage/SQLStore/SMW_SQLStore3_Writers.php:462 - preparePropertyTableUpdates`]

哈希生成如下:

$newHash = md5( serialize( array_values( $newData[$tableName] ) ) );

作为实例 $newData 可能是

Array
(
    [smw_fpt_cdat] => Array
        (
            [0] => Array
                (
                    [s_id] => 2281824
                    [o_serialized] => 1/2017/3/22/13/26/37
                    [o_sortkey] => 2457835.0601505
                )

        )

    [smw_fpt_mdat] => Array
        (
            [0] => Array
                (
                    [s_id] => 2281824
                    [o_serialized] => 1/2017/3/22/13/26/37
                    [o_sortkey] => 2457835.0601505
                )

        )

    [smw_di_wikipage] => Array
        (
            [0] => Array
                (
                    [s_id] => 2281824
                    [p_id] => 754161
                    [o_id] => 2215135
                )

            [1] => Array
                (
                    [s_id] => 2281824
                    [p_id] => 754162
                    [o_id] => 2215135
                )

        )

    [smw_di_number] => Array
        (
            [0] => Array
                (
                    [s_id] => 2281824
                    [p_id] => 754163
                    [o_serialized] => 1
                    [o_sortkey] => 1
                )

            [1] => Array
                (
                    [s_id] => 2281824
                    [p_id] => 754164
                    [o_serialized] => 157470
                    [o_sortkey] => 157470
                )

            [2] => Array
                (
                    [s_id] => 2281824
                    [p_id] => 754165
                    [o_serialized] => 638908
                    [o_sortkey] => 638908
                )

        )

)

然后,这些内容会按照 [extensions/SemanticMediaWiki/includes/storage/SQLStore/SMW_SQLStore3_Writers.php:611 - writePropertyTableRowUpdates] 中的说明进行更新

==即将继续==

于 2017-03-22T13:48:06.100 回答
0

请参阅https://www.semantic-mediawiki.org/wiki/Architecture_Tradeoffs上的讨论

查看的 SMW_TRIPLES 和 SWM_TRIPLES_NS 将使您能够访问存储在 SQLStore3 中的三元组的主语、谓语、宾语和类型。

它的工作方式向您展示了 SQLStore3 数据库的一般结构是如何链接项目的。

现在您特别要求表 smw_object_ids

其中有以下列:

Field               Type            Null Key    Default Extra
smw_id              int(8) unsigned NO   PRI    (null)  auto_increment
smw_namespace       int(11)         NO          (null)  
smw_title           varbinary(255)  NO   MUL    (null)  
smw_iw              varbinary(32)   NO          (null)  
smw_subobject       varbinary(255)  NO          (null)  
smw_sortkey         varbinary(255)  NO   MUL    (null)  
smw_proptable_hash  mediumblob      YES         (null)  

为了能够查看您可能想要使用强制转换的 varbinaries 的内容,例如

select smw_id as id, cast(smw_subobject as char) as subobject,cast(smw_title as char) 
as title 
from smw_object_ids
where length(smw_subobject)>0

现在您将看到该子对象具有附加到页面标题的内部哈希码,以使子对象在页面中可识别。

这是一个名为“HammerUndSichel”的页面示例,它有四个子对象:

id      subobject                           title
91147   _0a12ff61e3b10c31478f2ff62b49e68e   HammerUndSichel
91149   _52193085936ccfee4bc197ce37614073   HammerUndSichel
91207   _7fba483328e69e6aeb6dff0fc74447f4   HammerUndSichel
91148   _838fe1bff8f83dbfa40fb3314c47677b   HammerUndSichel

对于内部存储,使用“id”列,而子对象列还没有发挥作用。只有当您想要进行某种反向搜索时,麻烦才会开始。例如,ID 为 91147 的子对象和子对象 _0a12ff61e3b10c31478f2ff62b49e68e 您想找出在该子对象中设置的一些属性值。在询问查询中,您使用 SQL 存储中的 hasSubObject 执行此操作,这变得更加棘手。

SMW_TRIPLES_NS 视图通过将命名空间和子对象信息添加到三元组中的每个主题来解决该问题。这允许唯一标识子对象三元组。

对于您关于哈希的问题的第二部分,请查看其他一些在这个问题上似乎比我更有能力的答案。

于 2017-05-24T15:39:07.140 回答