2017-02-20 10 views
1

너무 약한 문서는 미디어 위키 및 의미 론적 미디어 위키에 열광합니다. 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

음, SMW에 이미 클래스와 메소드가 있으므로 의미 론적 데이터를 검색하기 위해 원시 SQL 쿼리를 수행하면 안됩니다. 비록 문서화 된 것은 아니기 때문에, 어떻게 작동하는지 그리고 어떻게 제대로 사용 하는지를 이해하기 위해서는 소스를 조사 할 필요가 있습니다.

SemanticQueryInterface의 출처를 보거나 코드에서 사용할 수있는 하위 개체에 대한 지원이 있으므로 몇 가지 예를 찾을 수 있습니다.

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

해시로 생성됩니다 소스 코드에 따르면

+0

거의 도움이되지 않았습니다. 그러나 이제 나는 또 다른 정반대의 질문을 가지고있다 : – Velaro

+0

위의 테이블에 해쉬가 어떻게 추가 되었는가? 정확하게 말하면, 나는 LastmodifiedBy smwproperty를 표시하지 않는 페이지가 있습니다. 디버깅 후 나는 Lastmodified 속성이 해시 목록에없는 smw_di_blob에 있기 때문에 표시되지 않는다는 것을 깨달았습니다. – Velaro

+0

@Velaro SMW의 작성자 만이 모든 세부 정보를 알고 있다고 생각하므로 해결하려는 문제를 설명 할 수 있다면 SQL을 파고 다닐 필요가 없을 수도 있습니다. – wakalaka

0

은 다음과 같습니다에 언급 한 바와 같이

$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 데이터베이스의 일반적인 구조가 항목을 연결하는 방법을 보여줍니다. 당신은 예를 캐스팅을 사용할 수 있습니다

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의 내용을 볼 수 있도록 : 특별히 표를 요구하고 지금

에는 다음과 같은 열이 있습니다

을 smw_object_ids 같은

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 

이제 당신은 그 하위 객체가 페이지 내에서 하위 객체를 식별 할 수있는 페이지 제목에 추가되는 내부 해시 코드를 볼 수 있습니다.은 "ID"열을 사용하는 내부 기억 아직 재생에 제공되지 않는 하위 객체 럼

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

: 여기

네 하위 객체를 갖는다 "HammerUndSichel"라는 페이지의 일례이다. 문제는 당신이 일종의 역방향 검색을하고 싶을 때만 시작됩니다. 예 : id 91147 서브 오브젝트 및 subobject _0a12ff61e3b10c31478f2ff62b49e68e 서브 오브젝트는 해당 서브 오브젝트 내에서 설정된 일부 특성 값을 찾으려합니다. 묻는 쿼리 내에서 SQL Store에 hasSubObject를 사용하면이 작업이 더 까다로워집니다.

SMW_TRIPLES_NS 뷰는 네임 스페이스 및 하위 객체 정보를 트리플의 각 제목에 추가하여 문제를 해결합니다. 이를 통해 하위 객체 트리플을 고유하게 식별 할 수 있습니다.

해시에 관한 질문의 두 번째 부분은 나보다 문제에 대해 유능한 것으로 보이는 다른 답변을 살펴보십시오.