2017-02-20 60 views
1

太糟糕的文檔讓我在mediawiki和語義mediawiki中變得瘋狂。 smw_object_ids中的列子對象是什麼意思?我如何才能找到與在上面指定的列中存儲類似_QUERYgjdfghjsag9u05sdfa的記錄相關的內容?如何通過子對象字段中的值找到SMW中的相關條目

編輯

和數據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', 
) 

但是他們都不能在指定的表中找到。

回答

1

嗯,我相信你不應該執行原始的SQL查詢來瀏覽語義數據,因爲SMW已經有它的類和方法。雖然他們幾乎沒有記錄,所以您需要調查來源以瞭解其工作原理以及如何正確使用它。

您可以通過查看SemanticQueryInterface的來源找到一些示例,或者因爲它支持子對象,所以您可以在代碼中使用它。

+0

沒有多大幫助。但是現在我又有另一個相反的問題了: – Velaro

+0

如何在上面提到的表中添加散列?確切地說,我有一個不顯示LastmodifiedBy smwproperty的頁面。調試後,我意識到它沒有顯示,因爲Lastmodified屬性位於散列列表中不存在的smw_di_blob中。 – Velaro

+0

@Velaro我相信只有SMW的創建者知道所有這些細節,所以我認爲如果你能描述你正在嘗試解決的問題會容易得多,也許不需要爲此挖掘SQL。 – wakalaka

0

根據源代碼

[`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_SQLS tore3_Writers.php:611 - writePropertyTableRowUpdates]

==即將繼續==

0

請參閱討論在 https://www.semantic-mediawiki.org/wiki/Architecture_Tradeoffs

的viewd 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 Store中的hasSubObject來做到這一點,這變得更加棘手。

SMW_TRIPLES_NS視圖通過向三元組中的每個主題添加名稱空間和子對象信息來解決問題。這允許唯一標識子對象三元組。

對於問題的第二部分關於散列,請看看其他一些似乎比我更能勝任的問題。

相關問題