GDL 연습 정보
다음 코드 예제에서는 파서가 모든 GDL 연습에 대해 생성하는 인덱스 트리를 보여 줍니다.
<:ROOT2>
*PFeature : InputTray <:INPUTTRAY_FEATURE>
*POption : Lower <:INPUTTRAY_OPTION2>
*Capacity <:TRAY_CAPACITY>
*Command <:ACOMMAND>
*Name <:INPUTTRAY_OPT_NAME>
*POption : Upper <:INPUTTRAY_OPTION2>
*Capacity <:TRAY_CAPACITY>
*Command <:ACOMMAND>
*Name <:INPUTTRAY_OPT_NAME>
*DefaultOption <:DEFAULT_OPT>
*Name <:NAME>
*PFeature : PaperSize <:PAPERSIZE_FEATURE>
*POption : Custom <:CUST_PAPERSIZE_OPTION>
*MinSize <:MIN_SIZE>
*MaxSize <:MAX_SIZE>
*Command <:ACOMMAND>
*Name <:PAPER_SIZE_OPT_NAME>
*POption : OEMName_Special_size <:OEM_PAPERSIZE_OPTION>
*OEM_Info <:OEM_INFO>
*PaperSize <:PAPERDIMENSIONS>
*Command <:ACOMMAND>
*Name <:PAPER_SIZE_OPT_NAME>
*POption : A4 <:PREDEFINED_PAPERSIZE_OPTION>
*PaperSize <:PAPERDIMENSIONS>
*Command <:ACOMMAND>
*Name <:PAPER_SIZE_OPT_NAME>
*POption : Legal <:PREDEFINED_PAPERSIZE_OPTION>
*PaperSize <:PAPERDIMENSIONS>
*Command <:ACOMMAND>
*Name <:PAPER_SIZE_OPT_NAME>
*POption : Letter <:PREDEFINED_PAPERSIZE_OPTION>
*PaperSize <:PAPERDIMENSIONS>
*Command <:ACOMMAND>
*Name <:PAPER_SIZE_OPT_NAME>
*DefaultOption <:DEFAULT_OPT>
*Name <:NAME>
*PFeature : random <:PFEATURE >
*POption : First <:GENERIC_OPTION>
*Command <:ACOMMAND>
*Name <:NAME>
*DefaultOption <:DEFAULT_OPT>
*Name <:NAME>
*이름 및 *POption 항목은 각각 서로 다른 의미 체계를 가진 여러 템플릿에 매핑됩니다. 예를 들어 *Name은 NAME, INPUTTRAY_OPT_NAME 또는 PAPER_SIZE_OPT_NAME 매핑됩니다. *POption은 GENERIC_OPTION, PREDEFINED_PAPERSIZE_OPTION, CUST_PAPERSIZE_OPTION, OEM_PAPERSIZE_OPTION 또는 INPUTTRAY_OPTION2 매핑됩니다. 템플릿 구조가 올바르게 정의되면 템플릿 규칙 다음의 파서에서 가장 적절한 템플릿을 찾습니다.
참고 이러한 연습에서는 스키마가 더 자세히 설명됨에 따라 몇 가지 기본 템플릿과 이후에 파생된 변형을 설정합니다. 이 프로세스는 스키마가 실제 환경에서 진화하는 방식을 모방합니다. 상속을 사용하면 이전에 정의된 템플릿을 변경하지 않고도 연습 스키마를 확장할 수 있었습니다. 이 기능을 사용하면 타사에서 master 스키마를 확장하고 타사 스키마 확장이 원래 master 스키마의 사용자와 호환되도록 할 수 있습니다.
표시되는 연습 답변은 고유하지 않습니다. 예를 들어 다음과 같은 방식으로 MIN_SIZE 템플릿을 파생하고 PAPERDIMENSIONS에서 MAX_SIZE 수 있습니다.
*Template: MIN_SIZE
{
*Name: "*MinSize"
*Inherits: PAPERDIMENSIONS
}
*Template: MAX_SIZE
{
*Name: "*MaxSize"
*Inherits: PAPERDIMENSIONS
}
PAPER_SIZE_OPT_NAME 및 INPUTTRAY_OPT_NAME 템플릿은 템플릿 이름에서 상속되며 *이름 항목도 다시 정의합니다.
*이름 항목을 다시 정의하면 기본 템플릿이 설정하는 상속 트리에서 이러한 파생 템플릿을 숨기는 효과가 있습니다.
일반적으로 템플릿이 NAME을 *Member로 선언하는 경우 이 선언은 NAME에서 파생된 모든 템플릿도 *멤버임을 의미합니다. 그러나 *이름 항목이 다시 정의된 파생 템플릿은 파생 템플릿의 암시적 *멤버 목록에서 제외됩니다. 이 제외가 없으면 원래 템플릿 이름에 매핑된 데이터 항목(예: *Pfeature 내에 나타나는 *이름)이 INPUTTRAY_OPT_NAME 매핑됩니다(잘못된 경우).
스키마의 원래 디자인 중에 NAME을 PAPER_SIZE_OPT_NAME 및 INPUTTRAY_OPT_NAME 전문화할 것으로 예상되는 경우 다른 스키마 구현은 단순히 *GENERIC_OPTION 멤버 목록에서 NAME을 제거하면 됩니다. 이렇게 변경하면 *이름을 다시 정의할 필요가 없습니다. 추가 디자인 구체화에는 공통 가상 템플릿에서 상속되는 NAME, PAPER_SIZE_OPT_NAME 및 INPUTTRAY_OPT_NAME 있습니다. 이러한 상황은 이러한 키워드 간의 관계를 보다 정확하게 반영하기 때문입니다.