2017-11-23 4 views
1

여기 예제를 공부했습니다 https://docs.marklogic.com/guide/semantics/tde#id_25531MarkLogic 템플릿 중심 추출 및 트리플 : 배열 노드를 다루는

나는 부모 이름으로 구조화과 어린이의 배열이 자신과 노드되는 문서의 집합이 이름. "name1 is-a-parent-of name2"형식의 트리플을 생성하는 템플릿을 만들고 싶습니다. 여기서 I 시도 테스트 문서의 구조의 예와 함께이다 :

[스크립트] TDE-EVALFAILED : tde.nodeDataExtract ([cts.doc 그러나

declareUpdate(); 

xdmp.documentInsert(
     '/test/tde.json', 
     { 
     content: { 
      name:'Joe Parent', 
      children: [ 
      { 
       name: 'Bob Child' 
      }, 
      { 
       name: 'Sue Child' 
      } 
      ] 
     } 
     }, 
     {permissions : xdmp.defaultPermissions(), 
     collections : ['test']}) 

cts.doc('/test/tde.json') 

var tde = require("/MarkLogic/tde.xqy"); 
// Load the user template for user profile rows 
var template = xdmp.toJSON(
{ 
    "template":{ 
    "context":"content", 
    "collections": [ 
     "test" 
    ], 
     "triples":[ 
     { 
     "subject": { 
      "val": "xs:string(name)" 
     }, 
     "predicate": { 
      "val": "sem:iri('is-parent-of')" 
     }, 
     "object": { 
      "val": "xs:string(children/name)" 
     }  
     } 
    ] 
    } 
} 
); 
//tde.validate([template]), 
tde.templateInsert("/templates/test.tde", template); 
tde.nodeDataExtract( 
    [cts.doc('/test/tde.json')] 
) 

, 위에서 예외를 발생 XDMP-CAST : (오류 : FORG0001) 잘못된 캐스트 : ('/test/tde.json')]) - Eval for Object = 'xs : string (children/name)'이 (가) TDE- BADVALEXPRESSION을 반환합니다. fn : doc ("/ test/tde")/fn : doc ("/ test/tde.json")/("[2]/text ("name "))로 캐스팅 된 xs : string?

배열 노드를 트리플로 추출하기위한 올바른 구문은 무엇입니까?

두 번째 다소 관련된 질문 : "child1 is-sibling-of child2"형식의 트리플을 원했습니다. 위의 예에서 "Bob Child is-sibling-of Sue Child"가됩니다. 이것에 대한 적절한 구문은 무엇입니까? 나는 이걸 어떻게 시작해야할지조차 모르겠다.

TDE는 여기에 가도됩니까? 또는 프로그래밍 방식으로이 작업을 수행하는 것이 더 좋습니다. 즉, 문서 수집시 문서 내에 이러한 트리플을 직접 생성합니까?

답변

2

변경 템플릿 오히려 부모보다, 각 아동에서 트리플을 투사 한 후 각 자식에 일치하고,하기위한 컨텍스트 (가 관련이 경우, ML 버전을 사용중인 9.입니다) .

children이라는 컨텍스트에서 개체 val은 xs:string(name)이고 부모를 선택하려면 자식의 상대 val의 선택을 xs:string(../../name)으로 조정하십시오.

var template = xdmp.toJSON(
{ 
    "template":{ 
    "context":"children", 
    "collections": [ 
     "test" 
    ], 
     "triples":[ 
     { 
     "subject": { 
      "val": "xs:string(../../name)" 
     }, 
     "predicate": { 
      "val": "sem:iri('is-parent-of')" 
     }, 
     "object": { 
      "val": "xs:string(name)" 
     }  
     } 
    ] 
    } 
} 
); 
+0

우수! 이것은 잘 작동했습니다. 내 주제가 원본 컨텍스트 외부로 확장 될 수 있다고 생각하지 않았습니다. 다른 배열 노드간에 트리플을 형성하는 것에 관한 제 2의 질문에 대한 조언이 있습니까? –