하나의 eXERD 문서는 수많은 eXERD 문서를 구성하는 모델들로 이루어져 있습니다. 스크립트로 원하는 작업을 수행하기 위해서는 먼저 원하는 모델을 정확히 선택하여 모델 컨텍스트를 얻는 방법을 배워야 합니다. 모델 컨텍스트는 원하는 모델들을 편집하거나 정보를 열람할 수 있는 API들을 제공합니다.
XScript는 select() 함수를 제공하며, 이를 이용하여 모델을 선택합니다. select 함수는 인자로 true 또는 false를 리턴하는 평가 함수를 받습니다. 이 평가 함수가 주어진 모델 컨텍스트를 검사하고 true를 리턴하면 해당 모델을 선택하게 됩니다.
이 함수는 선택된 모델들을 다룰 수 있는 모델 컨텍스트 객체를 반환합니다.
가장 보편적인 모델 선택 방법 중 하나는, 모델의 유형(타입)을 기준으로 선택하는 것입니다.
다음 예제에서는 모델의 타입이 table인 경우 선택하도록 합니다:
select(function(it){
return it.get("type") == "table";
});
평가함수를 따로 정의해 두고 사용해도 됩니다:
var selectTable = function(it){
return it.get("type") == "table";
};
// 또는
function selectTable(it){
return it.get("type") == "table";
}
select(selectTable);
주어 없이 전역 select() 함수를 이용하면 자동으로 루트 컨텍스트의 select() 함수가 호출되며, 문서에 포함된 모든 모델을 대상으로 선별 과정이 진행됩니다.
이와는 달리 이미 선택된 모델을 바탕으로 추가적인 선택 작업을 수행할 수도 있습니다. 다음은 특정 이름을 가진 테이블을 선택한 뒤, 그 테이블 내에서 컬럼들을 선택하는 것을 보여줍니다.
select(function(it){
return it.get("type") == "table" && it.get("logical-name") == "테스트 테이블";
}).select(function(it){
return it.get("type") == "column";
})
다음과 같이, 얻은 모델 컨텍스트를 변수로 지정해 두고 사용해도 됩니다:
var theTable = select(function(it){
return it.get("type") == "table" && it.get("logical-name") == "테스트 테이블";
});
theTable.select(function(it){
return it.get("type") == "column";
})