2016-11-23 3 views
1

목록에서 고유하게 만드는 잎의 "필수"를 만드는 방법을 이해할 수 없습니다.YANG, 잎은 목록에서 고유해야 함

이것은 리프가있는 목록이며,이 리프는이 목록의 다른 리프와 같은 값을 가질 수 없습니다. 코드

예 :

list myList { 
    key name; 

    leaf name { 
    type uint32; 
    } 

    container myContainer { 

    leaf myLeaf { 
     type uint32; 
    } 
    must "count(/myList/myContainer/myLeaf = .) > 1" { //Dont know how to create this must function. 
     error-message "myLeaf needs to be unique in the myList list"; 
    } 

    } 

} 

그래서 이미 현재 값으로 myList의 요소가 존재하는 경우 myLeaf 오류 메시지를 트리거 할.

답변

2

이 목록에는 unique이라는 키워드가 있으므로 must 표현을 사용하지 않아도됩니다. 인수에서 하나 이상의 공백으로 분리 된 스키마 노드 ID를 사용합니다.

list myList { 
     key name; 
     unique "myContainer/myLeaf"; 

     leaf name { 
     type uint32; 
     } 

     container myContainer { 

     leaf myLeaf { 
      type uint32; 
     } 

     } 

    } 

당신은 정말 must가 (당신이하지 말아야하는) 당신은 같은 것을 할 수있는이 처리하는 경우

current()의 XPath 함수가 잎을 반환
leaf myLeaf { 
     must "count(/myList/myContainer/myLeaf[current()=.])=1"; 
     type uint32; 
    } 

체크 대상 (초기 문맥 노드를), .self::node()을 나타내며 선택한 항목 (현재 XPath 컨텍스트 노드 집합)에 적용됩니다.

참고 : must 제약 조건은 어설 션을 나타냅니다.이 값은 true()이어야하며, 그렇지 않으면 인스턴스가 유효하지 않은 것으로 간주됩니다. 따라서 귀하의 > 1 상태는 귀하가 요구하는 것과 반대가됩니다.