Как найти связанные записи в SMW по значению в поле подобъекта

Слишком плохая документация сводит меня с ума в медиавики и семантической медиавики. Что означает подобъект столбца в 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',
)

Но ни одного из них я не могу найти в указанных таблицах.


person Velaro    schedule 20.02.2017    source источник


Ответы (3)


Ну, я считаю, что вам не следует выполнять необработанные SQL-запросы для просмотра семантических данных, потому что в SMW уже есть классы и методы для этого. Хотя они почти не задокументированы, поэтому вам нужно изучить источники, чтобы понять, как это работает и как правильно их использовать.

Вы можете найти пример, просмотрев источники SemanticQueryInterface или, поскольку он поддерживает подобъекты, которые вы можете просто использовать это в вашем коде.

person wakalaka    schedule 22.02.2017
comment
Был мало полезен. Но теперь у меня другой, еще встречный вопрос: - person Velaro; 15.03.2017
comment
Как добавляются хэши в упомянутую выше таблицу? Если быть точным, у меня есть страница, на которой не отображается свойство LastmodifiedBy smwproperty. После отладки я понял, что он не отображается, потому что свойство Lastmodified находится в smw_di_blob, которого нет в списке хэшей. - person Velaro; 15.03.2017
comment
@Velaro Я считаю, что только создатель SMW знает все эти детали, поэтому я думаю, было бы намного проще, если бы вы могли описать проблему, которую пытаетесь решить, возможно, для этого нет необходимости копаться в SQL. - person wakalaka; 15.03.2017

Согласно исходному коду

[`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]

== Продолжение скоро ==

person Velaro    schedule 22.03.2017

См. обсуждение на странице 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», а столбец подобъектов еще не задействован. Проблемы начинаются только тогда, когда вы хотите выполнить какой-то обратный поиск. Например. подобъект с идентификатором 91147 и подобъект _0a12ff61e3b10c31478f2ff62b49e68e, в котором вы хотите узнать какое-либо значение свойства, установленное в этом подобъекте. В запросе запроса вы делаете это с помощью hasSubObject в хранилище SQL, это становится более сложным.

Представление SMW_TRIPLES_NS решает эту проблему, добавляя информацию о пространстве имен и подобъекте к каждому субъекту в триплетах. Это позволяет однозначно идентифицировать тройки подобъектов.

Что касается второй части вашего вопроса о хеше, пожалуйста, посмотрите на некоторые другие ответы, которые кажутся более компетентными в этом вопросе, чем я.

person Wolfgang Fahl    schedule 24.05.2017