1. XML PARSE

XML PARSE statement는 XMLPARSE 컴파일러 옵션의 설정에 따른 COBOL 언어 인터페이스이다.

XMLPARSE(XMLSS)와 XMLPARSE(COMPAT)로 두 종류가 있는데, OFCOBOL에서는 XMLPARSE(XMLSS)를 기준으로 다루게 된다.

XML PARSE statement는 XML 문서를 개별 조각으로 분석하고 각 문서를 사용자가 작성한 처리 절차에 전달하게 된다.

figure pd xml parse
XML PARSE Format

다음은 XML PARSE statement 형식의 각 항목에 대한 설명이다.

  • identifier-1

    • identifier-1은 XML 문서의 문자열을 포함한다. identifier-1은 alphanumeric이나 alphanumeric 그룹 데이터 항목이어야 한다.

  • PROCESSING PROCEDURE phrase

    • XML 파서가 생성하는 다양한 이벤트를 처리하는 절차의 이름을 지정한다.

      • procedure-name-1, procedure-name-2

        procedure division 안에 있는 섹션이나 단락을 지정해야 한다. procedure-name-1과 procedure-name-2가 모두 지정된 경우, 같은 절차 영역 안에 있는 섹션이나 단락이어야 한다. 만약 둘 중 하나가 declarative 내에 있는 이름이면, 둘 다 동일하게 declarative 내에 있는 이름이어야 한다.

      • procedure-name-1

        처리 절차의 첫 번째 (또는 유일한) 섹션 또는 단락을 지정한다.

      • procedure-name-2

        처리 절차의 마지막 섹션 또는 단락을 지정한다.

    • XML 이벤트에 대해 파서는 procedure-name-1 이라는 절차의 첫 번째 statement 으로 제어를 전송한다. 제어는 항상 처리 절차에서 XML 파서로 반환된다.

      제어가 반환되는 지점은 다음과 같이 결정된다.

      • procedure-name-1이 단락 이름이고 procedure-name-2가 지정되지 않은 경우, procedure-name-1 단락의 마지막 statement를 실행한 후 반환된다.

      • procedure-name-1이 섹션 이름이고 procedure-name-2가 지정되지 않은 경우, procedure-name-1 섹션의 마지막 단락의 statement를 실행한 후 반환된다.

      • procedure-name-2가 지정되어 있고 단락 이름이면, procedure-name-2 단락의 마지막 statement를 실행한 후 반환된다.

      • procedure-name-2가 지정되어 있고 섹션 이름이면, procedure-name-2 섹션의 마지막 단락의 statement를 실행한 후 반환된다.

      procedure-name-1과 procedure-name-2 사이에 필요한 유일한 관계는 procedure-name-1로 명명된 절차에서 시작하여 procedure-name-2로 명명된 절차의 실행으로 끝나는 연속적인 실행 순서를 정의하는 것이다. 반환점으로가는 경로가 2개 이상인 경우, procedure-name-2는 EXIT statement 으로만 구성된 단락의 이름을 지정할 수 있으며, 반환점으로가는 모든 경로는 이 단락으로 이루어져야 한다.

    • 처리 절차는 XML 이벤트가 처리되는 모든 문장으로 구성된다. 처리 절차의 범위에는 처리 절차의 범위에 있는 CALL, EXIT, GO TO, GOBACK, PERFORM statement가 실행되는 모든 문장이 포함된다. 처리 절차의 범위는 GOBACK 또는 EXIT PROGRAM 문을 실행하지 않아야 한다. 처리 절차에서는 STOP RUN statement를 사용하여 실행 장치를 종료할 수 있다.

  • ON EXCEPTION phrase

    • ON EXCEPTION 구문은 XML PARSE statement에서 예외 조건이 발생할 때 실행된다.

    • XML 파서가 XML 문서를 처리하는 동안 오류를 탐지하는 경우 예외 조건이 있다. 파서는 먼저 'EXCEPTION’이 포함된 특수 레지스터 XML-EVENT를 사용하여 제어를 처리 절차에 전송하여 XML 예외를 나타낸다. 또한 일반 XML 이벤트에 대해 파서로 돌아가기 전에 처리 절차에서 XML-CODE를 -1로 설정한 경우에도 예외 조건이 존재한다. 이 경우 파서가 XML-EVENT를 'EXCEPTION’으로 표시하지 않고 구문 분석이 종료된다.

    • ON EXCEPTION 구문이 지정된 경우 파서는 imperative-statement-1로 제어를 전송한다. ON EXCEPTION 구문이 지정되지 않고 NOT ON EXCEPTION 구문이 지정된 경우 NOT ON EXCEPTION 구문은 무시되고 제어는 XML PARSE statement 끝으로 전송된다. 처리 절차에서 XML 예외 이벤트를 처리하고 XML-CODE를 0으로 설정한 후 제어 권한을 파서로 반환하는 경우 예외 조건은 더이상 존재하지 않는다.

  • NOT ON EXCEPTION phrase

    • NOT ON EXCEOPTION 구문은 XML PARSE 처리를 종료하는 경우 예외 조건이 존재하지 않을 때 실행된다. XML PARSE 처리를 종료할 때 예외 조건이 존재하지 않는 경우 NOT ON EXCEPTION이 지정되어 있으면 제어가 NOT ON EXCEPTION 구문의 imperative-statement-2로 전송된다. NOT ON EXCEPTION 구문이 지정되어 있지 않으면 제어는 XML PARSE statement의 끝으로 전송되며 ON EXCEPTION 구문이 지정되어 있으면 무시된다.

    • 특수 레지스터 XML-CODE는 XML PARSE statement를 실행한 후에 0을 포함한다.

  • END-XML phrase

    • XML GENERATE 또는 XML PARSE statement의 끝을 나타낸다.