diff --git a/01_copy_files_answer.py b/01_copy_files_answer.py index c7731bb..998c1e6 100644 --- a/01_copy_files_answer.py +++ b/01_copy_files_answer.py @@ -6,17 +6,17 @@ import re # 채점자료 정답 파일만 복사하는 스크립트 # ===== 사용자 설정 ===== -source_dir = r"D:\project\HWP\HWP-Scoring\회차별채점자료\2601_2" -exam_round = "2601_2" # 회차명 +source_dir = r"D:\project\HWP\HWP-Scoring\회차별채점자료\2601" +exam_round = "2601" # 회차명 exam_code = "DIW" # 코드명 # ======================= def get_exam_type(filename: str): """ - 파일명에서 확장자 앞의 마지막 알파벳을 추출 (예: 국어A.hwp → A) + 파일명에서 확장자 앞의 마지막 알파벳을 추출 (예: 국어A.hwpx → A) """ - match = re.search(r"([A-Za-z])\.hwp$", filename) + match = re.search(r"([A-Za-z])\.hwpx$", filename) return match.group(1).upper() if match else None @@ -30,7 +30,7 @@ def copy_exam_files(): copied = 0 for path in src.rglob("*"): - if path.is_file() and path.suffix.lower() == ".hwp": + if path.is_file() and path.suffix.lower() == ".hwpx": exam_type = get_exam_type(path.name) if not exam_type: continue # 마지막 문자가 알파벳이 아니면 건너뜀 diff --git a/02_conversion_hwp_to_xml.py b/02_conversion_hwp_to_xml.py index 0a3b37a..154e77b 100644 --- a/02_conversion_hwp_to_xml.py +++ b/02_conversion_hwp_to_xml.py @@ -166,7 +166,7 @@ if __name__ == "__main__": setup_logging() exam_rounds = [ - "2601_2", + "2601", ] # 변환할 폴더 경로 설정 diff --git a/260127_DIW_2601A_채점결과.xlsx b/260127_DIW_2601A_채점결과.xlsx new file mode 100644 index 0000000..e1973ec Binary files /dev/null and b/260127_DIW_2601A_채점결과.xlsx differ diff --git a/260127_DIW_2601B_채점결과.xlsx b/260127_DIW_2601B_채점결과.xlsx new file mode 100644 index 0000000..5e08646 Binary files /dev/null and b/260127_DIW_2601B_채점결과.xlsx differ diff --git a/260127_DIW_2601C_채점결과.xlsx b/260127_DIW_2601C_채점결과.xlsx new file mode 100644 index 0000000..a090e5b Binary files /dev/null and b/260127_DIW_2601C_채점결과.xlsx differ diff --git a/DIW_2601A.json b/DIW_2601A.json new file mode 100644 index 0000000..9ac210e --- /dev/null +++ b/DIW_2601A.json @@ -0,0 +1,850 @@ +{ + "0": { + "0": { + "path": "", + "path2": "", + "points": 0, + "category": "파일저장", + "item": "파일명 (수검번호.hwp/hwpx)" + }, + "1": { + "path": "//PAGEMARGIN", + "value": { + "Top": 20, + "Bottom": 20, + "Left": 20, + "Right": 20, + "Header": 10, + "Footer": 10, + "Gutter": 0 + }, + "tolerance": 1, + "points": 4, + "category": "PageSetting", + "item": "A4용지, 왼쪽/오른쪽/위쪽/아래쪽 (각20mm), 머리말/꼬리말 (10mm), 제본(0mm)" + }, + "2": { + "path": "", + "value": { + "FontName": "바탕", + "FontSize": "1000", + "Alignment": "Justify", + "LineSpacing": "160" + }, + "points": 4, + "category": "BasicSetting", + "item": "글꼴 (바탕, 10pt), 양쪽정렬, 줄간격 (160%)" + }, + "3": { + "path": "", + "value": null, + "points": 40, + "category": "오타감점", + "item": "오타 1개 -1점 / 2503회부터 오타 1개 -1점으로 변경" + } + }, + "1": { + "1": { + "path": "//TEXTART[@Text='{searchValue}']/TEXTARTSHAPE/@FontName", + "searchValue": "한국평생교육학회학술포럼", + "value": "궁서체", + "points": 1, + "category": "OneAnswer", + "item": "문구 (한국평생교육학회학술포럼)/① 글씨체 (궁서체)" + }, + "2": { + "path": "//TEXTART[@Text='{searchValue}']/descendant::WINDOWBRUSH/@FaceColor", + "searchValue": "한국평생교육학회학술포럼", + "value": "48,117,196", + "points": 2, + "category": "Color", + "item": "문구 (한국평생교육학회학술포럼)/② 채우기 : 색상(RGB:48,117,196)" + }, + "3": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Width", + "searchValue": "한국평생교육학회학술포럼", + "value": "130", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "문구 (한국평생교육학회학술포럼)/③ 크기-너비 (130 mm)" + }, + "4": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Height", + "searchValue": "한국평생교육학회학술포럼", + "value": "20", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "문구 (한국평생교육학회학술포럼)/④ 크기-높이 (20 mm)" + }, + "5": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/POSITION/@TreatAsChar", + "searchValue": "한국평생교육학회학술포럼", + "value": "true", + "points": 2, + "category": "OneAnswer", + "item": "문구 (한국평생교육학회학술포럼)/⑤ 위치 (글자처럼 취급)" + }, + "6": { + "path": "//PARASHAPE[@Id=//P[.//TEXTART[@Text='{searchValue}']]/@ParaShape]/@Align", + "searchValue": "한국평생교육학회학술포럼", + "value": "Center", + "points": 2, + "category": "OneAnswer", + "item": "문구 (한국평생교육학회학술포럼)/⑥ 정렬 (가운데 정렬)" + }, + "7": { + "path": "//TEXTART[@Text='{searchValue}']", + "searchValue": "한국평생교육학회학술포럼", + "value": true, + "points": 2, + "category": "Boolean", + "item": "문구 (한국평생교육학회학술포럼)/⑦ 글맵시모양 (육안확인)" + }, + "8": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/SIZE", + "searchValue": "한", + "value": { + "Height": 2800, + "Width": 2800 + }, + "tolerance": 200, + "points": 1, + "category": "TwoLineSize", + "item": "어/① 모양 (2줄)" + }, + "9": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "한", + "value": "굴림", + "points": 1, + "category": "FontName", + "item": "어/② 글씨체 (굴림)" + }, + "10": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor", + "searchValue": "한", + "value": "248,190,122", + "points": 2, + "category": "Color", + "item": "어/③ 면색 : 색상(RGB:248,190,122)" + }, + "11": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//OUTSIDEMARGIN/@Right", + "searchValue": "한", + "value": "3.0", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "어/④ 본문과의 간격 : 3.0mm" + }, + "12": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]", + "searchValue": "평생교육사 양성 교육과정 현황과 개선 방안 탐색", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구 (평생교육사 양성 교육과정 현황과 개선 방안 탐색)/① BOLD" + }, + "13": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]", + "searchValue": "평생교육사 양성 교육과정 현황과 개선 방안 탐색", + "value": "UNDERLINE", + "points": 1, + "category": "FontAttribute", + "item": "문구 (평생교육사 양성 교육과정 현황과 개선 방안 탐색)/② UNDERLINE" + }, + "14": { + "path": "//CHAR[contains(string(.),'{char1}')]/text()", + "path2": "//CHAR[contains(string(.),'{char2}')]/text()", + "path3": "//CHAR[contains(string(.),'{char3}')]/text()", + "char1": "◆", + "char2": "◆", + "char3": "※", + "value": 3, + "points": 3, + "category": "SpecialChar", + "item": "① ◆, ② ◆, ③ ※" + }, + "15": { + "path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape", + "searchValue": "행사안내", + "value": "궁서", + "points": 1, + "category": "FontName", + "item": "문구 (◆ 행사안내 ◆)/① 글씨체 (궁서)" + }, + "16": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{match_str}')]/ancestor::P/@ParaShape]/@Align", + "match_str": "행사안내", + "value": "Center", + "points": 1, + "category": "Align", + "item": "문구 (◆ 행사안내 ◆)/② 정렬 (가운데 정렬)" + }, + "17": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]", + "searchValue": "한국평생교육학회 홈페이지(http://www.ihd.or.kr) 참조", + "value": "ITALIC", + "points": 1, + "category": "FontAttribute", + "item": "문구 (한국평생교육학회 홈페이지(http://www.ihd.or.kr) 참조)/① ITALIC" + }, + "18": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]", + "searchValue": "한국평생교육학회 홈페이지(http://www.ihd.or.kr) 참조", + "value": "UNDERLINE", + "points": 1, + "category": "FontAttribute", + "item": "문구 (한국평생교육학회 홈페이지(http://www.ihd.or.kr) 참조)/② UNDERLINE" + }, + "19": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN", + "searchValue": "기타사항", + "value": { + "Left": 15, + "Indent": 12 + }, + "points": 2, + "category": "ParaShape", + "item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (15), 내어쓰기 (12)", + "desc": "내부적으로 내어쓰기는 음수값 / JSON value값은 양수로 입력" + }, + "20": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height", + "searchValue": "2026. 01. 24.", + "value": "1300", + "points": 1, + "category": "OneAnswer", + "item": "문구 (2026. 01. 24.)/① 크기 (1300)", + "desc": "1pt당 100" + }, + "21": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align", + "searchValue": "2026. 01. 24.", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "문구 (2026. 01. 24.)/② 정렬 (가운데 정렬)" + }, + "22": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "한국평생교육학회", + "value": "견고딕", + "points": 1, + "category": "FontName", + "item": "문구 (한국평생교육학회)/① 글씨체 (견고딕)" + }, + "23": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "한국평생교육학회", + "value": "2500", + "points": 1, + "category": "OneAnswer", + "item": "문구 (한국평생교육학회)/② 크기 (2500)" + }, + "24": { + "path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/ancestor::P/@ParaShape]/@Align", + "searchValue": "한국평생교육학회", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "문구 (한국평생교육학회)/③ 정렬 (가운데 정렬)" + }, + "25": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "DIAT", + "value": "굴림체", + "points": 1, + "category": "Header.FontName", + "item": "문구 (DIAT)/① 글꼴 (굴림체)" + }, + "26": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "DIAT", + "value": "900", + "points": 1, + "category": "Header.OneAnswer", + "item": "문구 (DIAT)/② 크기 (9pt)" + }, + "27": { + "path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/parent::P/@ParaShape]/@Align", + "searchValue": "DIAT", + "value": "Right", + "points": 1, + "category": "Header.OneAnswer", + "item": "문구 (DIAT)/③ 정렬 (오른쪽 정렬)" + }, + "28": { + "path": "//PAGENUM/@FormatType", + "value": "LatinCapital", + "points": 2, + "category": "PageNumber", + "item": "① 쪽 번호 매기기 (가,나,다 순으로)", + "desc1": { + "가,나,다": "HangulSyllable", + "1,2,3": "Digit", + "일,이,삼": "HangulPhonetic", + "갑,을,병": "DecagonCircle", + "A,B,C": "LatinCapital", + "a,b,c": "LatinSmall", + "Ⓐ,Ⓑ,Ⓒ": "CircledLatinCapital", + "①,②,③": "CircledDigit", + "一,二,三": "Ideograph", + "㉠,㉡,㉢": "CircledHangulJamo", + "ⓐ,ⓑ,ⓒ": "CircledLatinSmall", + "㊀,㊁,㊂": "CircledIdeograph", + "i,ii,iii": "RomanSmall", + "I,II,III": "RomanCapital", + "甲,乙,丙": "DecagonCircleHanja", + "+,++,+++": "UserChar", + "*,**,***": "UserChar", + "정답에 맞는 값 value에 입력": "" + }, + "desc2": "1, 2페이지 모두 정답이어야 점수 부여" + }, + "29": { + "path": "//PAGENUM/@Pos", + "value": "BottomRight", + "points": 2, + "category": "PageNumber", + "item": "오른쪽 아래", + "desc": "1, 2페이지 모두 정답이어야 점수 부여", + "desc2": { + "가운데 아래": "BottomCenter", + "오른쪽 아래": "BottomRight", + "왼쪽 아래": "BottomLeft" + } + }, + "30": { + "path": "//CHAR[contains(text(),'{searchValue}')]", + "searchValue": "http", + "value": true, + "points": 2, + "category": "hyperlink", + "item": "문구 (http://www.ihd.or.kr)/하이퍼링크 없이 작성", + "desc": "searchValue에 해당하는 주소 문구에 하이퍼링크가 하나라도 설정되어 있으면 오답" + }, + "31": { + "path": "//PARASHAPE[@Id='{parashape_id}']/PARAMARGIN/@LineSpacing", + "value": "200", + "first_word": "한", + "points": 2, + "category": "LineSpacing", + "item": "문제 1 줄간격 200% 설정", + "desc": "1페이지 문단의 줄간격이 정답이 아닌 문단이 있으면 False(감점), first_word 속성에 [문단 첫글자 장식]에 해당하는 글자를 입력해준다." + } + }, + "2": { + "1": { + "path": "//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@HeaderInside", + "path2": "//BORDERFILL[@Id=//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@BorferFill]", + "value": { + "header_inside": true, + "all_double_slim": true + }, + "points": 4, + "category": "PageBorder", + "item": "문제2 쪽테두리(이중 실선, 머리말 포함) 설정" + }, + "2": { + "path": "count(//SECTION)>1", + "value": true, + "points": 3, + "category": "Boolean", + "item": "① 구역나누기", + "desc": "섹션이 1개 이상이면 점수부여" + }, + "3": { + "path": "./TEXT/COLDEF/@Count", + "value": "2", + "points": 3, + "category": "TwoColumn", + "item": "② 다단 2단" + }, + "4": { + "path": "//RECTANGLE/SHAPEOBJECT/SIZE/@Width", + "value": "65", + "points": 2, + "category": "Rectangle.mmSize", + "item": "문구 (평생교육시대)/① 크기-너비 (65 mm)" + }, + "5": { + "path": "//RECTANGLE/SHAPEOBJECT/SIZE/@Height", + "value": "12", + "points": 2, + "category": "Rectangle.mmSize", + "item": "문구 (평생교육시대)/② 크기-높이 (12 mm)" + }, + "6": { + "path": "//RECTANGLE//LINESHAPE", + "value": { + "Style": "DoubleSlim", + "Width": "283" + }, + "points": 2, + "category": "Rectangle.LineShape", + "item": "문구 (평생교육시대)/③ 테두리 : 이중 실선(1.00mm)", + "desc": "1mm = 283pt value['Width']에 pt값 입력" + }, + "7": { + "path": "//RECTANGLE/@Ratio", + "value": "20", + "points": 2, + "category": "Rectangle.OneAnswer", + "item": "문구 (평생교육시대)/④ 글상자 모서리 (둥근모양)", + "desc": "모서리 비율 반원:50 / 둥근모양:20" + }, + "8": { + "path": "//RECTANGLE//WINDOWBRUSH/@FaceColor", + "value": "224,122,146", + "points": 2, + "category": "Rectangle.Color", + "item": "문구 (평생교육시대)/⑤ 채우기 : 색상(RGB:224,122,146)" + }, + "9": { + "path": "//RECTANGLE/SHAPEOBJECT/POSITION/@TreatAsChar", + "value": "true", + "points": 1, + "category": "Rectangle.OneAnswer", + "item": "문구 (평생교육시대)/⑥ 글상자 위치 (글자처럼 취급)" + }, + "10": { + "path": "//PARASHAPE[@Id='{rect_parashape_id}']/@Align", + "value": "Center", + "points": 1, + "category": "Rectangle.TextBoxAlign", + "item": "문구 (평생교육시대)/⑦ 글상자 정렬 (가운데 정렬)" + }, + "11": { + "path": ".//RECTANGLE//TEXT/@CharShape", + "value": "휴먼옛체", + "points": 1, + "category": "Rectangle.FontName", + "item": "문구 (평생교육시대)/⑧ 글씨체 (휴먼옛체)" + }, + "12": { + "path": "//CHARSHAPE[@Id='{rect_charshape_id}']/@Height", + "value": "2000", + "points": 1, + "category": "Rectangle.FontSize", + "item": "문구 (평생교육시대)/⑨ 글씨크기 (2000)", + "desc": "1pt당 100" + }, + "13": { + "path": "//PARASHAPE[@Id={rect_parashape_id}]/@Align", + "value": "Center", + "points": 1, + "category": "Rectangle.TextBoxAlign", + "item": "문구 (평생교육시대)/⑩ 정렬 (가운데 정렬)" + }, + "14": { + "path": "//BINITEM[@BinData=//PICTURE/IMAGE/@BinItem][@Format='JPG' or @Format='JPEG' or @Format='PNG']", + "value": true, + "points": 2, + "category": "Boolean", + "item": "① 파일명 \"그림A.jpg\" 삽입", + "desc": "첨부 이미지 파일명 손상으로 정상적인 채점이 불가한 경우가 발견되어서 이미지 첨부 여부로 채점 방식 변경 (7/3)" + }, + "15": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/SIZE/@Width", + "value": "80", + "points": 2, + "category": "mmSize", + "item": "② 크기-너비 (80 mm)" + }, + "16": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/SIZE/@Height", + "value": "40", + "points": 2, + "category": "mmSize", + "item": "③ 크기-높이 (40 mm)" + }, + "17": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@HorzOffset", + "value": "0", + "points": 2, + "category": "mmSize", + "item": "④ 위치 (어울림 : 가로-쪽의 왼쪽 0mm)" + }, + "18": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@VertOffset", + "value": "24", + "points": 2, + "category": "mmSize", + "item": "⑤ 위치 (어울림 : 세로-쪽의 위 24 mm)" + }, + "19": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "1. 평생교육이란?", + "value": "굴림", + "points": 1, + "category": "FontName", + "item": "문구① (1. 평생교육이란?)/① 글씨체 (굴림)" + }, + "20": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "1. 평생교육이란?", + "value": "1200", + "points": 1, + "category": "OneAnswer", + "item": "문구① (1. 평생교육이란?)/② 크기 (1200)" + }, + "21": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "1. 평생교육이란?", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구① (1. 평생교육이란?)/③ 진하게" + }, + "22": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "2. 평생교육사의 개념", + "value": "굴림", + "points": 1, + "category": "FontName", + "item": "문구② (2. 평생교육사의 개념)/① 글씨체 (굴림)" + }, + "23": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "2. 평생교육사의 개념", + "value": "1200", + "points": 1, + "category": "OneAnswer", + "item": "문구② (2. 평생교육사의 개념)/② 크기 (1200)" + }, + "24": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "2. 평생교육사의 개념", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구② (2. 평생교육사의 개념)/③ 진하게" + }, + "25": { + "path": "boolean(//TEXT[CHAR[contains(text(),'{option}')]]/FOOTNOTE)", + "path2": "boolean(//CHAR[substring(., string-length(.) - string-length('{option}') + 1) = '{option}']/following-sibling::FOOTNOTE/descendant::CHAR)", + "option": "유네스코", + "value": true, + "points": 2, + "category": "Boolean", + "item": "문구 (유네스코)/① 각주 설정 및 문구 입력" + }, + "26": { + "path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape", + "searchValue": "교육, 과학, 문화의 보급 및 교류를 통하여 국가 간의 협력 증진을 목적으로 설립된 국제연합전문기구", + "value": "궁서", + "points": 1, + "category": "FontName", + "item": "문구 (유네스코)/② 글씨체 (궁서)" + }, + "27": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape]/@Height", + "searchValue": "교육, 과학, 문화의 보급 및 교류를 통하여 국가 간의 협력 증진을 목적으로 설립된 국제연합전문기구", + "value": "900", + "points": 1, + "category": "OneAnswer", + "item": "문구 (유네스코)/③ 크기 (9pt)" + }, + "28": { + "path": "//P[TEXT[CHAR[contains(text(), '{searchValue}')]]]//AUTONUMFORMAT/@Type", + "searchValue": "교육, 과학, 문화의 보급 및 교류를 통하여 국가 간의 협력 증진을 목적으로 설립된 국제연합전문기구", + "value": "UserChar", + "points": 2, + "category": "OneAnswer", + "item": "문구 (전당)/④ 각주 번호모양", + "desc": { + "가,나,다": "HangulSyllable", + "1,2,3": "Digit", + "일,이,삼": "HangulPhonetic", + "갑,을,병": "DecagonCircle", + "A,B,C": "LatinCapital", + "a,b,c": "LatinSmall", + "Ⓐ,Ⓑ,Ⓒ": "CircledLatinCapital", + "①,②,③": "CircledDigit", + "一,二,三": "Ideograph", + "㉠,㉡,㉢": "CircledHangulJamo", + "ⓐ,ⓑ,ⓒ": "CircledLatinSmall", + "㊀,㊁,㊂": "CircledIdeograph", + "i,ii,iii": "RomanSmall", + "I,II,III": "RomanCapital", + "甲,乙,丙": "DecagonCircleHanja", + "+,++,+++": "UserChar", + "*,**,***": "UserChar", + "정답에 맞는 값 value에 입력": "" + } + }, + "29": { + "path": "boolean(//CHAR[contains(text(),'{ignoreWord}')])", + "ignoreWord": "Development", + "value": true, + "points": 3, + "category": "Boolean", + "item": "Development/영단어 미입력, 대소문자/오타 시 전체 감점", + "desc": "유사도 검사를 진행하지 않고 영단어가 모두 일치해야 하므로 xpath구문 내 단어도 수정필요" + }, + "30": { + "path": "//CHAR[contains(text(),'{kor}')][contains(text(),'{chn}')]", + "word": [ + ["평생", "平生"], + ["교육", "敎育"], + ["신념", "信念"], + ["현장", "現場"], + ["자격", "資格"] + ], + "value": 10, + "points": 10, + "category": "Hanja", + "item": "① 평생(平生), ② 교육(敎育), ③ 신념(信念), ④ 현장(現場), ⑤ 자격(資格)" + }, + "31": { + "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'하는사람')])", + "value": true, + "points": 3, + "category": "Boolean", + "item": "문구 (…어느 하나에 사람에게 해당하는 평생교육사의…)>'사람에게' / '해당하는' 순서바꿈" + }, + "32": { + "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'21과목이다')])", + "value": true, + "points": 3, + "category": "Boolean", + "item": "문구 (…총 21종목이다…)>'종' → '과' 글자바꿈" + }, + "33": { + "path": "//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape", + "searchValue": "평생교육사 자격증 발급(단위: 명)", + "value": "돋움", + "points": 1, + "category": "FontName", + "item": "제목 문구 (평생교육사 자격증 발급(단위: 명))/① 글씨체 (돋움)" + }, + "34": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "평생교육사 자격증 발급(단위: 명)", + "value": "1200", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (평생교육사 자격증 발급(단위: 명))/② 크기 (1200)" + }, + "35": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "평생교육사 자격증 발급(단위: 명)", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "제목 문구 (평생교육사 자격증 발급(단위: 명))/③ 진하게" + }, + "36": { + "path": "//PARASHAPE[@Id=//P[.//CHAR[text()='{searchValue}']]/@ParaShape]/@Align", + "searchValue": "평생교육사 자격증 발급(단위: 명)", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (평생교육사 자격증 발급(단위: 명))/④ 정렬 (가운데 정렬)" + }, + "37": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor", + "value": "233,174,43", + "points": 2, + "category": "Color", + "item": "위쪽 제목 셀/① 색상(RGB:233,174,43)" + }, + "38": { + "path": "//CHARSHAPE[@Id=//TABLE/ROW[1]/descendant::TEXT/@CharShape]", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "위쪽 제목 셀/② 진하게", + "desc": "글자 속성이라 CELLZONE으로 적용 되지 않음" + }, + "39": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Type", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/BOTTOMBORDER/@Type", + "value": "DoubleSlim", + "points": 2, + "category": "TableAnswer", + "item": "제목 셀 아래선/① 이중실선" + }, + "40": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Width", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/BOTTOMBORDER/@Width", + "value": "0.5mm", + "points": 2, + "category": "TableAnswer", + "item": "제목 셀 아래선/② 0.5mm" + }, + "41": { + "path": "//TABLE//TEXT/@CharShape", + "path2": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/FONTID/@Hangul]/@Name", + "value": "중고딕", + "points": 1, + "category": "TableFontName", + "category_tmp": "FontName", + "item": "글자모양/① 글씨체 (중고딕)", + "desc": "테이블 폰트명 문항은 테이블의 모든 셀이 정답폰트와 일치해야 함, 하나만 일치해도 정답으로 채점할 경우 category값을 FontName으로 변경" + }, + "42": { + "path": "//CHARSHAPE[@Id=//TABLE//TEXT/@CharShape]/@Height", + "value": "1000", + "points": 1, + "category": "TableAnswer", + "item": "글자모양/② 크기 (1000)" + }, + "43": { + "path": "//PARASHAPE[@Id=//TABLE/ROW//P/@ParaShape]/@Align", + "value": "Center", + "points": 1, + "category": "TableAnswer", + "item": "글자모양/③ 정렬 (가운데 정렬)" + }, + "44": { + "path": "boolean(//TABLE[1]/ROW[last()]/CELL[position()=last()]//FIELDBEGIN[starts-with(@Command, '={option}')]) and boolean(//TABLE[1]/ROW[last()]/CELL[position()=last()-1]//FIELDBEGIN[starts-with(@Command, '={option}')])", + "option": "SUM", + "value": true, + "points": 4, + "category": "Boolean", + "item": "블록 계산식/합계", + "desc": "option값에 합계는 SUM / 평균은 AVG" + }, + "45": { + "chart_xpath": "", + "chart_type": "묶은 세로 막대형", + "value": true, + "points": 2, + "category": "ChartType", + "item": "① 종류 (묶은 세로 막대형)", + "desc": "chart_type을 입력받아 차트타입에 맞는 xml요소가 있는지 내부적으로 검사, chart_type만 한글로 입력해주면 된다. (공백무시)" + }, + "46": { + "chart_xpath": "//c:valAx/c:majorTickMark/@val", + "value": "out", + "points": 2, + "category": "ChartOneAnswer", + "item": "② 값 축 주 눈금선", + "desc": "chart xml파일에서 답안을 가져오는 문항은 path키값 대신 chart_xpath키값을 이용해 xapth구문을 작성한다" + }, + "47": { + "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]//SIZE/@Width", + "value": "80", + "points": 2, + "category": "mmSize", + "item": "③ 크기-너비 (80 mm)" + }, + "48": { + "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]//SIZE/@Height", + "value": "90", + "points": 2, + "category": "mmSize", + "item": "④ 크기-높이 (90 mm)" + }, + "49": { + "chart_xpath": "boolean(//c:chart and not(//c:pt[not(ancestor::c:tx)]/c:v[text()='합계' or text()='평균']))", + "value": true, + "points": 2, + "category": "Boolean", + "item": "⑤ 차트 데이터(표에서 블록계산식을 제외한 나머지 값만 이용)", + "desc": "차트가 존재하고 블록계산식(합계, 평균) 데이터가 없는 경우 정답 처리" + }, + "50": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r//a:ea/@typeface", + "searchValue": "평생교육사 자격증 발급", + "value": "바탕체", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (평생교육사 자격증 발급)/① 글씨체 (바탕체)" + }, + "51": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@sz", + "searchValue": "평생교육사 자격증 발급", + "value": "1300", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (평생교육사 자격증 발급)/② 크기 (1300)" + }, + "52": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@{option}", + "option": "b", + "searchValue": "평생교육사 자격증 발급", + "value": "1", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (평생교육사 자격증 발급)/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "53": { + "chart_xpath": "//c:catAx/c:txPr//a:ea/@typeface", + "value": "돋움체", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/① 글꼴 (돋움체)" + }, + "54": { + "chart_xpath": "//c:catAx/c:txPr//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/② 크기 (9pt)" + }, + "55": { + "chart_xpath": "//c:catAx/c:txPr//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "56": { + "chart_xpath": "//c:valAx/c:txPr//a:ea/@typeface", + "value": "돋움체", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/① 글꼴 (돋움체)" + }, + "57": { + "chart_xpath": "//c:valAx/c:txPr//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/② 크기 (9pt)" + }, + "58": { + "chart_xpath": "//c:valAx/c:txPr//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "59": { + "chart_xpath": "//c:legend//a:ea/@typeface", + "value": "돋움체", + "points": 1, + "category": "OneAnswer", + "item": "범례/① 글꼴 (돋움체)" + }, + "60": { + "chart_xpath": "//c:legend//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "OneAnswer", + "item": "범례/② 크기 (9pt)" + }, + "61": { + "chart_xpath": "//c:legend//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "OneAnswer", + "item": "범례/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + } + } +} diff --git a/DIW_2601B.json b/DIW_2601B.json new file mode 100644 index 0000000..fdd6633 --- /dev/null +++ b/DIW_2601B.json @@ -0,0 +1,850 @@ +{ + "0": { + "0": { + "path": "", + "path2": "", + "points": 0, + "category": "파일저장", + "item": "파일명 (수검번호.hwp/hwpx)" + }, + "1": { + "path": "//PAGEMARGIN", + "value": { + "Top": 20, + "Bottom": 20, + "Left": 20, + "Right": 20, + "Header": 10, + "Footer": 10, + "Gutter": 0 + }, + "tolerance": 1, + "points": 4, + "category": "PageSetting", + "item": "A4용지, 왼쪽/오른쪽/위쪽/아래쪽 (각20mm), 머리말/꼬리말 (10mm), 제본(0mm)" + }, + "2": { + "path": "", + "value": { + "FontName": "바탕", + "FontSize": "1000", + "Alignment": "Justify", + "LineSpacing": "160" + }, + "points": 4, + "category": "BasicSetting", + "item": "글꼴 (바탕, 10pt), 양쪽정렬, 줄간격 (160%)" + }, + "3": { + "path": "", + "value": null, + "points": 40, + "category": "오타감점", + "item": "오타 1개 -1점 / 2503회부터 오타 1개 -1점으로 변경" + } + }, + "1": { + "1": { + "path": "//TEXTART[@Text='{searchValue}']/TEXTARTSHAPE/@FontName", + "searchValue": "전국제과제빵박람회", + "value": "견고딕", + "points": 1, + "category": "OneAnswer", + "item": "문구 (전국제과제빵박람회)/① 글씨체 (견고딕)" + }, + "2": { + "path": "//TEXTART[@Text='{searchValue}']/descendant::WINDOWBRUSH/@FaceColor", + "searchValue": "전국제과제빵박람회", + "value": "49,95,151", + "points": 2, + "category": "Color", + "item": "문구 (전국제과제빵박람회)/② 채우기 : 색상(RGB:49,95,151)" + }, + "3": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Width", + "searchValue": "전국제과제빵박람회", + "value": "110", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "문구 (전국제과제빵박람회)/③ 크기-너비 (110 mm)" + }, + "4": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Height", + "searchValue": "전국제과제빵박람회", + "value": "20", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "문구 (전국제과제빵박람회)/④ 크기-높이 (20 mm)" + }, + "5": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/POSITION/@TreatAsChar", + "searchValue": "전국제과제빵박람회", + "value": "true", + "points": 2, + "category": "OneAnswer", + "item": "문구 (전국제과제빵박람회)/⑤ 위치 (글자처럼 취급)" + }, + "6": { + "path": "//PARASHAPE[@Id=//P[.//TEXTART[@Text='{searchValue}']]/@ParaShape]/@Align", + "searchValue": "전국제과제빵박람회", + "value": "Center", + "points": 2, + "category": "OneAnswer", + "item": "문구 (전국제과제빵박람회)/⑥ 정렬 (가운데 정렬)" + }, + "7": { + "path": "//TEXTART[@Text='{searchValue}']", + "searchValue": "전국제과제빵박람회", + "value": true, + "points": 2, + "category": "Boolean", + "item": "문구 (전국제과제빵박람회)/⑦ 글맵시모양 (육안확인)" + }, + "8": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/SIZE", + "searchValue": "제", + "value": { + "Height": 2800, + "Width": 2800 + }, + "tolerance": 200, + "points": 1, + "category": "TwoLineSize", + "item": "어/① 모양 (2줄)" + }, + "9": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "제", + "value": "궁서", + "points": 1, + "category": "FontName", + "item": "어/② 글씨체 (궁서)" + }, + "10": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor", + "searchValue": "제", + "value": "66,227,189", + "points": 2, + "category": "Color", + "item": "어/③ 면색 : 색상(RGB:66,227,189)" + }, + "11": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//OUTSIDEMARGIN/@Right", + "searchValue": "제", + "value": "3.0", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "어/④ 본문과의 간격 : 3.0mm" + }, + "12": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]", + "searchValue": "국내 유일의 제과제빵 전문 박람회", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구 (국내 유일의 제과제빵 전문 박람회)/① BOLD" + }, + "13": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]", + "searchValue": "국내 유일의 제과제빵 전문 박람회", + "value": "UNDERLINE", + "points": 1, + "category": "FontAttribute", + "item": "문구 (국내 유일의 제과제빵 전문 박람회)/② UNDERLINE" + }, + "14": { + "path": "//CHAR[contains(string(.),'{char1}')]/text()", + "path2": "//CHAR[contains(string(.),'{char2}')]/text()", + "path3": "//CHAR[contains(string(.),'{char3}')]/text()", + "char1": "★", + "char2": "★", + "char3": "※", + "value": 3, + "points": 3, + "category": "SpecialChar", + "item": "① ★, ② ★, ③ ※" + }, + "15": { + "path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape", + "searchValue": "행사안내", + "value": "굴림", + "points": 1, + "category": "FontName", + "item": "문구 (★ 행사안내 ★)/① 글씨체 (굴림)" + }, + "16": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{match_str}')]/ancestor::P/@ParaShape]/@Align", + "match_str": "행사안내", + "value": "Center", + "points": 1, + "category": "Align", + "item": "문구 (★ 행사안내 ★)/② 정렬 (가운데 정렬)" + }, + "17": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]", + "searchValue": "홈페이지(http://www.ihd.or.kr) 게시판 또는 전화(02-123-4567) 접수", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구 (홈페이지(http://www.ihd.or.kr) 게시판 또는 전화(02-123-4567) 접수)/① BOLD" + }, + "18": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]", + "searchValue": "홈페이지(http://www.ihd.or.kr) 게시판 또는 전화(02-123-4567) 접수", + "value": "ITALIC", + "points": 1, + "category": "FontAttribute", + "item": "문구 (홈페이지(http://www.ihd.or.kr) 게시판 또는 전화(02-123-4567) 접수)/② ITALIC" + }, + "19": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN", + "searchValue": "기타사항", + "value": { + "Left": 12, + "Indent": 10 + }, + "points": 2, + "category": "ParaShape", + "item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (12), 내어쓰기 (10)", + "desc": "내부적으로 내어쓰기는 음수값 / JSON value값은 양수로 입력" + }, + "20": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height", + "searchValue": "2026. 01. 24.", + "value": "1300", + "points": 1, + "category": "OneAnswer", + "item": "문구 (2026. 01. 24.)/① 크기 (1300)", + "desc": "1pt당 100" + }, + "21": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align", + "searchValue": "2026. 01. 24.", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "문구 (2026. 01. 24.)/② 정렬 (가운데 정렬)" + }, + "22": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "대한제과제빵협회", + "value": "궁서체", + "points": 1, + "category": "FontName", + "item": "문구 (대한제과제빵협회)/① 글씨체 (궁서체)" + }, + "23": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "대한제과제빵협회", + "value": "2200", + "points": 1, + "category": "OneAnswer", + "item": "문구 (대한제과제빵협회)/② 크기 (2200)" + }, + "24": { + "path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/ancestor::P/@ParaShape]/@Align", + "searchValue": "대한제과제빵협회", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "문구 (대한제과제빵협회)/③ 정렬 (가운데 정렬)" + }, + "25": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "DIAT", + "value": "굴림", + "points": 1, + "category": "Header.FontName", + "item": "문구 (DIAT)/① 글꼴 (굴림)" + }, + "26": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "DIAT", + "value": "900", + "points": 1, + "category": "Header.OneAnswer", + "item": "문구 (DIAT)/② 크기 (9pt)" + }, + "27": { + "path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/parent::P/@ParaShape]/@Align", + "searchValue": "DIAT", + "value": "Right", + "points": 1, + "category": "Header.OneAnswer", + "item": "문구 (DIAT)/③ 정렬 (오른쪽 정렬)" + }, + "28": { + "path": "//PAGENUM/@FormatType", + "value": "LatinCapital", + "points": 2, + "category": "PageNumber", + "item": "① 쪽 번호 매기기 (가,나,다 순으로)", + "desc1": { + "가,나,다": "HangulSyllable", + "1,2,3": "Digit", + "일,이,삼": "HangulPhonetic", + "갑,을,병": "DecagonCircle", + "A,B,C": "LatinCapital", + "a,b,c": "LatinSmall", + "Ⓐ,Ⓑ,Ⓒ": "CircledLatinCapital", + "①,②,③": "CircledDigit", + "一,二,三": "Ideograph", + "㉠,㉡,㉢": "CircledHangulJamo", + "ⓐ,ⓑ,ⓒ": "CircledLatinSmall", + "㊀,㊁,㊂": "CircledIdeograph", + "i,ii,iii": "RomanSmall", + "I,II,III": "RomanCapital", + "甲,乙,丙": "DecagonCircleHanja", + "+,++,+++": "UserChar", + "*,**,***": "UserChar", + "정답에 맞는 값 value에 입력": "" + }, + "desc2": "1, 2페이지 모두 정답이어야 점수 부여" + }, + "29": { + "path": "//PAGENUM/@Pos", + "value": "BottomCenter", + "points": 2, + "category": "PageNumber", + "item": "가운데 아래", + "desc": "1, 2페이지 모두 정답이어야 점수 부여", + "desc2": { + "가운데 아래": "BottomCenter", + "오른쪽 아래": "BottomRight", + "왼쪽 아래": "BottomLeft" + } + }, + "30": { + "path": "//CHAR[contains(text(),'{searchValue}')]", + "searchValue": "http", + "value": true, + "points": 2, + "category": "hyperlink", + "item": "문구 (http://www.ihd.or.kr)/하이퍼링크 없이 작성", + "desc": "searchValue에 해당하는 주소 문구에 하이퍼링크가 하나라도 설정되어 있으면 오답" + }, + "31": { + "path": "//PARASHAPE[@Id='{parashape_id}']/PARAMARGIN/@LineSpacing", + "value": "190", + "first_word": "제", + "points": 2, + "category": "LineSpacing", + "item": "문제 1 줄간격 190% 설정", + "desc": "1페이지 문단의 줄간격이 정답이 아닌 문단이 있으면 False(감점), first_word 속성에 [문단 첫글자 장식]에 해당하는 글자를 입력해준다." + } + }, + "2": { + "1": { + "path": "//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@HeaderInside", + "path2": "//BORDERFILL[@Id=//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@BorferFill]", + "value": { + "header_inside": true, + "all_double_slim": true + }, + "points": 4, + "category": "PageBorder", + "item": "문제2 쪽테두리(이중 실선, 머리말 포함) 설정" + }, + "2": { + "path": "count(//SECTION)>1", + "value": true, + "points": 3, + "category": "Boolean", + "item": "① 구역나누기", + "desc": "섹션이 1개 이상이면 점수부여" + }, + "3": { + "path": "./TEXT/COLDEF/@Count", + "value": "2", + "points": 3, + "category": "TwoColumn", + "item": "② 다단 2단" + }, + "4": { + "path": "//RECTANGLE/SHAPEOBJECT/SIZE/@Width", + "value": "50", + "points": 2, + "category": "Rectangle.mmSize", + "item": "문구 (제과제빵)/① 크기-너비 (50 mm)" + }, + "5": { + "path": "//RECTANGLE/SHAPEOBJECT/SIZE/@Height", + "value": "12", + "points": 2, + "category": "Rectangle.mmSize", + "item": "문구 (제과제빵)/② 크기-높이 (12 mm)" + }, + "6": { + "path": "//RECTANGLE//LINESHAPE", + "value": { + "Style": "DoubleSlim", + "Width": "283" + }, + "points": 2, + "category": "Rectangle.LineShape", + "item": "문구 (제과제빵)/③ 테두리 : 이중 실선(1.00mm)", + "desc": "1mm = 283pt value['Width']에 pt값 입력" + }, + "7": { + "path": "//RECTANGLE/@Ratio", + "value": "20", + "points": 2, + "category": "Rectangle.OneAnswer", + "item": "문구 (제과제빵)/④ 글상자 모서리 (둥근모양)", + "desc": "모서리 비율 반원:50 / 둥근모양:20" + }, + "8": { + "path": "//RECTANGLE//WINDOWBRUSH/@FaceColor", + "value": "202,86,167", + "points": 2, + "category": "Rectangle.Color", + "item": "문구 (제과제빵)/⑤ 채우기 : 색상(RGB:202,86,167)" + }, + "9": { + "path": "//RECTANGLE/SHAPEOBJECT/POSITION/@TreatAsChar", + "value": "true", + "points": 1, + "category": "Rectangle.OneAnswer", + "item": "문구 (제과제빵)/⑥ 글상자 위치 (글자처럼 취급)" + }, + "10": { + "path": "//PARASHAPE[@Id='{rect_parashape_id}']/@Align", + "value": "Center", + "points": 1, + "category": "Rectangle.TextBoxAlign", + "item": "문구 (제과제빵)/⑦ 글상자 정렬 (가운데 정렬)" + }, + "11": { + "path": ".//RECTANGLE//TEXT/@CharShape", + "value": "돋움체", + "points": 1, + "category": "Rectangle.FontName", + "item": "문구 (제과제빵)/⑧ 글씨체 (돋움체)" + }, + "12": { + "path": "//CHARSHAPE[@Id='{rect_charshape_id}']/@Height", + "value": "2000", + "points": 1, + "category": "Rectangle.FontSize", + "item": "문구 (제과제빵)/⑨ 글씨크기 (2000)", + "desc": "1pt당 100" + }, + "13": { + "path": "//PARASHAPE[@Id={rect_parashape_id}]/@Align", + "value": "Center", + "points": 1, + "category": "Rectangle.TextBoxAlign", + "item": "문구 (제과제빵)/⑩ 정렬 (가운데 정렬)" + }, + "14": { + "path": "//BINITEM[@BinData=//PICTURE/IMAGE/@BinItem][@Format='JPG' or @Format='JPEG' or @Format='PNG']", + "value": true, + "points": 2, + "category": "Boolean", + "item": "① 파일명 \"그림B.jpg\" 삽입", + "desc": "첨부 이미지 파일명 손상으로 정상적인 채점이 불가한 경우가 발견되어서 이미지 첨부 여부로 채점 방식 변경 (7/3)" + }, + "15": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/SIZE/@Width", + "value": "80", + "points": 2, + "category": "mmSize", + "item": "② 크기-너비 (80 mm)" + }, + "16": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/SIZE/@Height", + "value": "40", + "points": 2, + "category": "mmSize", + "item": "③ 크기-높이 (40 mm)" + }, + "17": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@HorzOffset", + "value": "0", + "points": 2, + "category": "mmSize", + "item": "④ 위치 (어울림 : 가로-쪽의 왼쪽 0mm)" + }, + "18": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@VertOffset", + "value": "24", + "points": 2, + "category": "mmSize", + "item": "⑤ 위치 (어울림 : 세로-쪽의 위 24 mm)" + }, + "19": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "1. 제과제빵이란?", + "value": "돋움", + "points": 1, + "category": "FontName", + "item": "문구① (1. 제과제빵이란?)/① 글씨체 (돋움)" + }, + "20": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "1. 제과제빵이란?", + "value": "1200", + "points": 1, + "category": "OneAnswer", + "item": "문구① (1. 제과제빵이란?)/② 크기 (1200)" + }, + "21": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "1. 제과제빵이란?", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구① (1. 제과제빵이란?)/③ 진하게" + }, + "22": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "2. 설탕 공예", + "value": "돋움", + "points": 1, + "category": "FontName", + "item": "문구② (2. 설탕 공예)/① 글씨체 (돋움)" + }, + "23": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "2. 설탕 공예", + "value": "1200", + "points": 1, + "category": "OneAnswer", + "item": "문구② (2. 설탕 공예)/② 크기 (1200)" + }, + "24": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "2. 설탕 공예", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구② (2. 설탕 공예)/③ 진하게" + }, + "25": { + "path": "boolean(//TEXT[CHAR[contains(text(),'{option}')]]/FOOTNOTE)", + "path2": "boolean(//CHAR[substring(., string-length(.) - string-length('{option}') + 1) = '{option}']/following-sibling::FOOTNOTE/descendant::CHAR)", + "option": "가니쉬", + "value": true, + "points": 2, + "category": "Boolean", + "item": "문구 (가니쉬)/① 각주 설정 및 문구 입력" + }, + "26": { + "path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape", + "searchValue": "음식의 외형을 돋보이게 하기 위해 장식 또는 곁들임으로 사용되는 식재료", + "value": "굴림", + "points": 1, + "category": "FontName", + "item": "문구 (가니쉬)/② 글씨체 (굴림)" + }, + "27": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape]/@Height", + "searchValue": "음식의 외형을 돋보이게 하기 위해 장식 또는 곁들임으로 사용되는 식재료", + "value": "900", + "points": 1, + "category": "OneAnswer", + "item": "문구 (가니쉬)/③ 크기 (9pt)" + }, + "28": { + "path": "//P[TEXT[CHAR[contains(text(), '{searchValue}')]]]//AUTONUMFORMAT/@Type", + "searchValue": "음식의 외형을 돋보이게 하기 위해 장식 또는 곁들임으로 사용되는 식재료", + "value": "RomanSmall", + "points": 2, + "category": "OneAnswer", + "item": "문구 (전당)/④ 각주 번호모양", + "desc": { + "가,나,다": "HangulSyllable", + "1,2,3": "Digit", + "일,이,삼": "HangulPhonetic", + "갑,을,병": "DecagonCircle", + "A,B,C": "LatinCapital", + "a,b,c": "LatinSmall", + "Ⓐ,Ⓑ,Ⓒ": "CircledLatinCapital", + "①,②,③": "CircledDigit", + "一,二,三": "Ideograph", + "㉠,㉡,㉢": "CircledHangulJamo", + "ⓐ,ⓑ,ⓒ": "CircledLatinSmall", + "㊀,㊁,㊂": "CircledIdeograph", + "i,ii,iii": "RomanSmall", + "I,II,III": "RomanCapital", + "甲,乙,丙": "DecagonCircleHanja", + "+,++,+++": "UserChar", + "*,**,***": "UserChar", + "정답에 맞는 값 value에 입력": "" + } + }, + "29": { + "path": "boolean(//CHAR[contains(text(),'{ignoreWord}')])", + "ignoreWord": "Chocolatier", + "value": true, + "points": 3, + "category": "Boolean", + "item": "Chocolatier/영단어 미입력, 대소문자/오타 시 전체 감점", + "desc": "유사도 검사를 진행하지 않고 영단어가 모두 일치해야 하므로 xpath구문 내 단어도 수정필요" + }, + "30": { + "path": "//CHAR[contains(text(),'{kor}')][contains(text(),'{chn}')]", + "word": [ + ["발효", "醱酵"], + ["제품", "製品"], + ["장식", "裝飾"], + ["표현", "表現"], + ["경향", "傾向"] + ], + "value": 10, + "points": 10, + "category": "Hanja", + "item": "① 발효(醱酵), ② 제품(製品), ③ 장식(裝飾), ④ 표현(表現), ⑤ 경향(傾向) " + }, + "31": { + "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'루를사용')])", + "value": true, + "points": 3, + "category": "Boolean", + "item": "문구 (…보통은 밀가루를 포용하지만…)>'포'→'사' 글자바꿈" + }, + "32": { + "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'람을불어')])", + "value": true, + "points": 3, + "category": "Boolean", + "item": "문구 (…뭉치기, 불어넣어 바람을 부풀리기 등의…)>'불어넣어 / 바람을' 순서바꿈" + }, + "33": { + "path": "//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape", + "searchValue": "연령별 박람회 참가자 현황(단위:명)", + "value": "굴림체", + "points": 1, + "category": "FontName", + "item": "제목 문구 (연령별 박람회 참가자 현황(단위:명))/① 글씨체 (굴림체)" + }, + "34": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "연령별 박람회 참가자 현황(단위:명)", + "value": "1100", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (연령별 박람회 참가자 현황(단위:명))/② 크기 (1100)" + }, + "35": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "연령별 박람회 참가자 현황(단위:명)", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "제목 문구 (연령별 박람회 참가자 현황(단위:명))/③ 진하게" + }, + "36": { + "path": "//PARASHAPE[@Id=//P[.//CHAR[text()='{searchValue}']]/@ParaShape]/@Align", + "searchValue": "연령별 박람회 참가자 현황(단위:명)", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (연령별 박람회 참가자 현황(단위:명))/④ 정렬 (가운데 정렬)" + }, + "37": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor", + "value": "233,225,43", + "points": 2, + "category": "Color", + "item": "위쪽 제목 셀/① 색상(RGB:233,225,43)" + }, + "38": { + "path": "//CHARSHAPE[@Id=//TABLE/ROW[1]/descendant::TEXT/@CharShape]", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "위쪽 제목 셀/② 진하게", + "desc": "글자 속성이라 CELLZONE으로 적용 되지 않음" + }, + "39": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Type", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/BOTTOMBORDER/@Type", + "value": "DoubleSlim", + "points": 2, + "category": "TableAnswer", + "item": "제목 셀 아래선/① 이중실선" + }, + "40": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Width", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/BOTTOMBORDER/@Width", + "value": "0.5mm", + "points": 2, + "category": "TableAnswer", + "item": "제목 셀 아래선/② 0.5mm" + }, + "41": { + "path": "//TABLE//TEXT/@CharShape", + "path2": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/FONTID/@Hangul]/@Name", + "value": "중고딕", + "points": 1, + "category": "TableFontName", + "category_tmp": "FontName", + "item": "글자모양/① 글씨체 (중고딕)", + "desc": "테이블 폰트명 문항은 테이블의 모든 셀이 정답폰트와 일치해야 함, 하나만 일치해도 정답으로 채점할 경우 category값을 FontName으로 변경" + }, + "42": { + "path": "//CHARSHAPE[@Id=//TABLE//TEXT/@CharShape]/@Height", + "value": "1000", + "points": 1, + "category": "TableAnswer", + "item": "글자모양/② 크기 (1000)" + }, + "43": { + "path": "//PARASHAPE[@Id=//TABLE/ROW//P/@ParaShape]/@Align", + "value": "Center", + "points": 1, + "category": "TableAnswer", + "item": "글자모양/③ 정렬 (가운데 정렬)" + }, + "44": { + "path": "boolean(//TABLE[1]/ROW[last()]/CELL[position()=last()]//FIELDBEGIN[starts-with(@Command, '={option}')]) and boolean(//TABLE[1]/ROW[last()]/CELL[position()=last()-1]//FIELDBEGIN[starts-with(@Command, '={option}')])", + "option": "SUM", + "value": true, + "points": 4, + "category": "Boolean", + "item": "블록 계산식/합계", + "desc": "option값에 합계는 SUM / 평균은 AVG" + }, + "45": { + "chart_xpath": "", + "chart_type": "묶은 가로 막대형", + "value": true, + "points": 2, + "category": "ChartType", + "item": "① 종류 (묶은 가로 막대형)", + "desc": "chart_type을 입력받아 차트타입에 맞는 xml요소가 있는지 내부적으로 검사, chart_type만 한글로 입력해주면 된다. (공백무시)" + }, + "46": { + "chart_xpath": "//c:valAx/c:majorTickMark/@val", + "value": "out", + "points": 2, + "category": "ChartOneAnswer", + "item": "② 값 축 주 눈금선", + "desc": "chart xml파일에서 답안을 가져오는 문항은 path키값 대신 chart_xpath키값을 이용해 xapth구문을 작성한다" + }, + "47": { + "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]//SIZE/@Width", + "value": "80", + "points": 2, + "category": "mmSize", + "item": "③ 크기-너비 (80 mm)" + }, + "48": { + "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]//SIZE/@Height", + "value": "90", + "points": 2, + "category": "mmSize", + "item": "④ 크기-높이 (90 mm)" + }, + "49": { + "chart_xpath": "boolean(//c:chart and not(//c:pt[not(ancestor::c:tx)]/c:v[text()='합계' or text()='평균']))", + "value": true, + "points": 2, + "category": "Boolean", + "item": "⑤ 차트 데이터(표에서 블록계산식을 제외한 나머지 값만 이용)", + "desc": "차트가 존재하고 블록계산식(합계, 평균) 데이터가 없는 경우 정답 처리" + }, + "50": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r//a:ea/@typeface", + "searchValue": "연령별 박람회 참가자 현황", + "value": "돋움체", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (연령별 박람회 참가자 현황)/① 글씨체 (돋움체)" + }, + "51": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@sz", + "searchValue": "연령별 박람회 참가자 현황", + "value": "1300", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (연령별 박람회 참가자 현황)/② 크기 (1300)" + }, + "52": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@{option}", + "option": "b", + "searchValue": "연령별 박람회 참가자 현황", + "value": "1", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (연령별 박람회 참가자 현황)/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "53": { + "chart_xpath": "//c:catAx/c:txPr//a:ea/@typeface", + "value": "바탕체", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/① 글꼴 (바탕체)" + }, + "54": { + "chart_xpath": "//c:catAx/c:txPr//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/② 크기 (9pt)" + }, + "55": { + "chart_xpath": "//c:catAx/c:txPr//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "56": { + "chart_xpath": "//c:valAx/c:txPr//a:ea/@typeface", + "value": "바탕체", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/① 글꼴 (바탕체)" + }, + "57": { + "chart_xpath": "//c:valAx/c:txPr//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/② 크기 (9pt)" + }, + "58": { + "chart_xpath": "//c:valAx/c:txPr//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "59": { + "chart_xpath": "//c:legend//a:ea/@typeface", + "value": "바탕체", + "points": 1, + "category": "OneAnswer", + "item": "범례/① 글꼴 (바탕체)" + }, + "60": { + "chart_xpath": "//c:legend//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "OneAnswer", + "item": "범례/② 크기 (9pt)" + }, + "61": { + "chart_xpath": "//c:legend//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "OneAnswer", + "item": "범례/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + } + } +} diff --git a/DIW_2601C.json b/DIW_2601C.json new file mode 100644 index 0000000..2a4281e --- /dev/null +++ b/DIW_2601C.json @@ -0,0 +1,850 @@ +{ + "0": { + "0": { + "path": "", + "path2": "", + "points": 0, + "category": "파일저장", + "item": "파일명 (수검번호.hwp/hwpx)" + }, + "1": { + "path": "//PAGEMARGIN", + "value": { + "Top": 20, + "Bottom": 20, + "Left": 20, + "Right": 20, + "Header": 10, + "Footer": 10, + "Gutter": 0 + }, + "tolerance": 1, + "points": 4, + "category": "PageSetting", + "item": "A4용지, 왼쪽/오른쪽/위쪽/아래쪽 (각20mm), 머리말/꼬리말 (10mm), 제본(0mm)" + }, + "2": { + "path": "", + "value": { + "FontName": "바탕", + "FontSize": "1000", + "Alignment": "Justify", + "LineSpacing": "160" + }, + "points": 4, + "category": "BasicSetting", + "item": "글꼴 (바탕, 10pt), 양쪽정렬, 줄간격 (160%)" + }, + "3": { + "path": "", + "value": null, + "points": 40, + "category": "오타감점", + "item": "오타 1개 -1점 / 2503회부터 오타 1개 -1점으로 변경" + } + }, + "1": { + "1": { + "path": "//TEXTART[@Text='{searchValue}']/TEXTARTSHAPE/@FontName", + "searchValue": "거창에살으리랏다", + "value": "견고딕", + "points": 1, + "category": "OneAnswer", + "item": "문구 (거창에살으리랏다)/① 글씨체 (견고딕)" + }, + "2": { + "path": "//TEXTART[@Text='{searchValue}']/descendant::WINDOWBRUSH/@FaceColor", + "searchValue": "거창에살으리랏다", + "value": "211,125,209", + "points": 2, + "category": "Color", + "item": "문구 (거창에살으리랏다)/② 채우기 : 색상(RGB:211,125,209)" + }, + "3": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Width", + "searchValue": "거창에살으리랏다", + "value": "110", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "문구 (거창에살으리랏다)/③ 크기-너비 (110 mm)" + }, + "4": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Height", + "searchValue": "거창에살으리랏다", + "value": "20", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "문구 (거창에살으리랏다)/④ 크기-높이 (20 mm)" + }, + "5": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/POSITION/@TreatAsChar", + "searchValue": "거창에살으리랏다", + "value": "true", + "points": 2, + "category": "OneAnswer", + "item": "문구 (거창에살으리랏다)/⑤ 위치 (글자처럼 취급)" + }, + "6": { + "path": "//PARASHAPE[@Id=//P[.//TEXTART[@Text='{searchValue}']]/@ParaShape]/@Align", + "searchValue": "거창에살으리랏다", + "value": "Center", + "points": 2, + "category": "OneAnswer", + "item": "문구 (거창에살으리랏다)/⑥ 정렬 (가운데 정렬)" + }, + "7": { + "path": "//TEXTART[@Text='{searchValue}']", + "searchValue": "거창에살으리랏다", + "value": true, + "points": 2, + "category": "Boolean", + "item": "문구 (거창에살으리랏다)/⑦ 글맵시모양 (육안확인)" + }, + "8": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/SIZE", + "searchValue": "뉴", + "value": { + "Height": 2800, + "Width": 2800 + }, + "tolerance": 200, + "points": 1, + "category": "TwoLineSize", + "item": "어/① 모양 (2줄)" + }, + "9": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "뉴", + "value": "궁서체", + "points": 1, + "category": "FontName", + "item": "어/② 글씨체 (궁서체)" + }, + "10": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor", + "searchValue": "뉴", + "value": "174,227,120", + "points": 2, + "category": "Color", + "item": "어/③ 면색 : 색상(RGB:174,227,120)" + }, + "11": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//OUTSIDEMARGIN/@Right", + "searchValue": "뉴", + "value": "3.0", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "어/④ 본문과의 간격 : 3.0mm" + }, + "12": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]", + "searchValue": "저출산/고령화 수치(중위연령, 고령화지수, 출산율)", + "value": "ITALIC", + "points": 1, + "category": "FontAttribute", + "item": "문구 (저출산/고령화 수치(중위연령, 고령화지수, 출산율))/① ITALIC" + }, + "13": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]", + "searchValue": "저출산/고령화 수치(중위연령, 고령화지수, 출산율)", + "value": "UNDERLINE", + "points": 1, + "category": "FontAttribute", + "item": "문구 (저출산/고령화 수치(중위연령, 고령화지수, 출산율))/② UNDERLINE" + }, + "14": { + "path": "//CHAR[contains(string(.),'{char1}')]/text()", + "path2": "//CHAR[contains(string(.),'{char2}')]/text()", + "path3": "//CHAR[contains(string(.),'{char3}')]/text()", + "char1": "☆", + "char2": "☆", + "char3": "※", + "value": 3, + "points": 3, + "category": "SpecialChar", + "item": "① ☆, ② ☆, ③ ※" + }, + "15": { + "path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape", + "searchValue": "행사안내", + "value": "궁서", + "points": 1, + "category": "FontName", + "item": "문구 (☆ 행사안내 ☆)/① 글씨체 (궁서)" + }, + "16": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{match_str}')]/ancestor::P/@ParaShape]/@Align", + "match_str": "행사안내", + "value": "Center", + "points": 1, + "category": "Align", + "item": "문구 (☆ 행사안내 ☆)/② 정렬 (가운데 정렬)" + }, + "17": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]", + "searchValue": "2026. 01. 25.(일) 18:00까지 온라인으로 등록(http://www.ihd.or.kr)", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구 (2026. 01. 25.(일) 18:00까지 온라인으로 등록(http://www.ihd.or.kr))/① BOLD" + }, + "18": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]", + "searchValue": "2026. 01. 25.(일) 18:00까지 온라인으로 등록(http://www.ihd.or.kr)", + "value": "UNDERLINE", + "points": 1, + "category": "FontAttribute", + "item": "문구 (2026. 01. 25.(일) 18:00까지 온라인으로 등록(http://www.ihd.or.kr))/② UNDERLINE" + }, + "19": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN", + "searchValue": "기타사항", + "value": { + "Left": 15, + "Indent": 12 + }, + "points": 2, + "category": "ParaShape", + "item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (15), 내어쓰기 (12)", + "desc": "내부적으로 내어쓰기는 음수값 / JSON value값은 양수로 입력" + }, + "20": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height", + "searchValue": "2026. 01. 24.", + "value": "1300", + "points": 1, + "category": "OneAnswer", + "item": "문구 (2026. 01. 24.)/① 크기 (1300)", + "desc": "1pt당 100" + }, + "21": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align", + "searchValue": "2026. 01. 24.", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "문구 (2026. 01. 24.)/② 정렬 (가운데 정렬)" + }, + "22": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "거창군청", + "value": "휴먼옛체", + "points": 1, + "category": "FontName", + "item": "문구 (거창군청)/① 글씨체 (휴먼옛체)" + }, + "23": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "거창군청", + "value": "2700", + "points": 1, + "category": "OneAnswer", + "item": "문구 (거창군청)/② 크기 (2700)" + }, + "24": { + "path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/ancestor::P/@ParaShape]/@Align", + "searchValue": "거창군청", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "문구 (거창군청)/③ 정렬 (가운데 정렬)" + }, + "25": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "DIAT", + "value": "돋움", + "points": 1, + "category": "Header.FontName", + "item": "문구 (DIAT)/① 글꼴 (돋움)" + }, + "26": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "DIAT", + "value": "900", + "points": 1, + "category": "Header.OneAnswer", + "item": "문구 (DIAT)/② 크기 (9pt)" + }, + "27": { + "path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/parent::P/@ParaShape]/@Align", + "searchValue": "DIAT", + "value": "Right", + "points": 1, + "category": "Header.OneAnswer", + "item": "문구 (DIAT)/③ 정렬 (오른쪽 정렬)" + }, + "28": { + "path": "//PAGENUM/@FormatType", + "value": "LatinCapital", + "points": 2, + "category": "PageNumber", + "item": "① 쪽 번호 매기기 (가,나,다 순으로)", + "desc1": { + "가,나,다": "HangulSyllable", + "1,2,3": "Digit", + "일,이,삼": "HangulPhonetic", + "갑,을,병": "DecagonCircle", + "A,B,C": "LatinCapital", + "a,b,c": "LatinSmall", + "Ⓐ,Ⓑ,Ⓒ": "CircledLatinCapital", + "①,②,③": "CircledDigit", + "一,二,三": "Ideograph", + "㉠,㉡,㉢": "CircledHangulJamo", + "ⓐ,ⓑ,ⓒ": "CircledLatinSmall", + "㊀,㊁,㊂": "CircledIdeograph", + "i,ii,iii": "RomanSmall", + "I,II,III": "RomanCapital", + "甲,乙,丙": "DecagonCircleHanja", + "+,++,+++": "UserChar", + "*,**,***": "UserChar", + "정답에 맞는 값 value에 입력": "" + }, + "desc2": "1, 2페이지 모두 정답이어야 점수 부여" + }, + "29": { + "path": "//PAGENUM/@Pos", + "value": "BottomCenter", + "points": 2, + "category": "PageNumber", + "item": "가운데 아래", + "desc": "1, 2페이지 모두 정답이어야 점수 부여", + "desc2": { + "가운데 아래": "BottomCenter", + "오른쪽 아래": "BottomRight", + "왼쪽 아래": "BottomLeft" + } + }, + "30": { + "path": "//CHAR[contains(text(),'{searchValue}')]", + "searchValue": "http", + "value": true, + "points": 2, + "category": "hyperlink", + "item": "문구 (http://www.ihd.or.kr)/하이퍼링크 없이 작성", + "desc": "searchValue에 해당하는 주소 문구에 하이퍼링크가 하나라도 설정되어 있으면 오답" + }, + "31": { + "path": "//PARASHAPE[@Id='{parashape_id}']/PARAMARGIN/@LineSpacing", + "value": "180", + "first_word": "뉴", + "points": 2, + "category": "LineSpacing", + "item": "문제 1 줄간격 180% 설정", + "desc": "1페이지 문단의 줄간격이 정답이 아닌 문단이 있으면 False(감점), first_word 속성에 [문단 첫글자 장식]에 해당하는 글자를 입력해준다." + } + }, + "2": { + "1": { + "path": "//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@HeaderInside", + "path2": "//BORDERFILL[@Id=//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@BorferFill]", + "value": { + "header_inside": true, + "all_double_slim": true + }, + "points": 4, + "category": "PageBorder", + "item": "문제2 쪽테두리(이중 실선, 머리말 포함) 설정" + }, + "2": { + "path": "count(//SECTION)>1", + "value": true, + "points": 3, + "category": "Boolean", + "item": "① 구역나누기", + "desc": "섹션이 1개 이상이면 점수부여" + }, + "3": { + "path": "./TEXT/COLDEF/@Count", + "value": "2", + "points": 3, + "category": "TwoColumn", + "item": "② 다단 2단" + }, + "4": { + "path": "//RECTANGLE/SHAPEOBJECT/SIZE/@Width", + "value": "65", + "points": 2, + "category": "Rectangle.mmSize", + "item": "문구 (인구절벽)/① 크기-너비 (65 mm)" + }, + "5": { + "path": "//RECTANGLE/SHAPEOBJECT/SIZE/@Height", + "value": "12", + "points": 2, + "category": "Rectangle.mmSize", + "item": "문구 (인구절벽)/② 크기-높이 (12 mm)" + }, + "6": { + "path": "//RECTANGLE//LINESHAPE", + "value": { + "Style": "DoubleSlim", + "Width": "283" + }, + "points": 2, + "category": "Rectangle.LineShape", + "item": "문구 (인구절벽)/③ 테두리 : 이중 실선(1.00mm)", + "desc": "1mm = 283pt value['Width']에 pt값 입력" + }, + "7": { + "path": "//RECTANGLE/@Ratio", + "value": "50", + "points": 2, + "category": "Rectangle.OneAnswer", + "item": "문구 (인구절벽)/④ 글상자 모서리 (둥근모양)", + "desc": "모서리 비율 반원:50 / 둥근모양:20" + }, + "8": { + "path": "//RECTANGLE//WINDOWBRUSH/@FaceColor", + "value": "244,220,42", + "points": 2, + "category": "Rectangle.Color", + "item": "문구 (인구절벽)/⑤ 채우기 : 색상(RGB:244,220,42)" + }, + "9": { + "path": "//RECTANGLE/SHAPEOBJECT/POSITION/@TreatAsChar", + "value": "true", + "points": 1, + "category": "Rectangle.OneAnswer", + "item": "문구 (인구절벽)/⑥ 글상자 위치 (글자처럼 취급)" + }, + "10": { + "path": "//PARASHAPE[@Id='{rect_parashape_id}']/@Align", + "value": "Center", + "points": 1, + "category": "Rectangle.TextBoxAlign", + "item": "문구 (인구절벽)/⑦ 글상자 정렬 (가운데 정렬)" + }, + "11": { + "path": ".//RECTANGLE//TEXT/@CharShape", + "value": "휴먼옛체", + "points": 1, + "category": "Rectangle.FontName", + "item": "문구 (인구절벽)/⑧ 글씨체 (휴먼옛체)" + }, + "12": { + "path": "//CHARSHAPE[@Id='{rect_charshape_id}']/@Height", + "value": "2000", + "points": 1, + "category": "Rectangle.FontSize", + "item": "문구 (인구절벽)/⑨ 글씨크기 (2000)", + "desc": "1pt당 100" + }, + "13": { + "path": "//PARASHAPE[@Id={rect_parashape_id}]/@Align", + "value": "Center", + "points": 1, + "category": "Rectangle.TextBoxAlign", + "item": "문구 (인구절벽)/⑩ 정렬 (가운데 정렬)" + }, + "14": { + "path": "//BINITEM[@BinData=//PICTURE/IMAGE/@BinItem][@Format='JPG' or @Format='JPEG' or @Format='PNG']", + "value": true, + "points": 2, + "category": "Boolean", + "item": "① 파일명 \"그림C.jpg\" 삽입", + "desc": "첨부 이미지 파일명 손상으로 정상적인 채점이 불가한 경우가 발견되어서 이미지 첨부 여부로 채점 방식 변경 (7/3)" + }, + "15": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/SIZE/@Width", + "value": "80", + "points": 2, + "category": "mmSize", + "item": "② 크기-너비 (80 mm)" + }, + "16": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/SIZE/@Height", + "value": "40", + "points": 2, + "category": "mmSize", + "item": "③ 크기-높이 (40 mm)" + }, + "17": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@HorzOffset", + "value": "0", + "points": 2, + "category": "mmSize", + "item": "④ 위치 (어울림 : 가로-쪽의 왼쪽 0mm)" + }, + "18": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@VertOffset", + "value": "22", + "points": 2, + "category": "mmSize", + "item": "⑤ 위치 (어울림 : 세로-쪽의 위 22 mm)" + }, + "19": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "1. 인구절벽이란?", + "value": "중고딕", + "points": 1, + "category": "FontName", + "item": "문구① (1. 인구절벽이란?)/① 글씨체 (중고딕)" + }, + "20": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "1. 인구절벽이란?", + "value": "1200", + "points": 1, + "category": "OneAnswer", + "item": "문구① (1. 인구절벽이란?)/② 크기 (1200)" + }, + "21": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "1. 인구절벽이란?", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구① (1. 인구절벽이란?)/③ 진하게" + }, + "22": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "2. 인구절벽 대응책", + "value": "중고딕", + "points": 1, + "category": "FontName", + "item": "문구② (2. 인구절벽 대응책)/① 글씨체 (중고딕)" + }, + "23": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "2. 인구절벽 대응책", + "value": "1200", + "points": 1, + "category": "OneAnswer", + "item": "문구② (2. 인구절벽 대응책)/② 크기 (1200)" + }, + "24": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "2. 인구절벽 대응책", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구② (2. 인구절벽 대응책)/③ 진하게" + }, + "25": { + "path": "boolean(//TEXT[CHAR[contains(text(),'{option}')]]/FOOTNOTE)", + "path2": "boolean(//CHAR[substring(., string-length(.) - string-length('{option}') + 1) = '{option}']/following-sibling::FOOTNOTE/descendant::CHAR)", + "option": "생산가능인구", + "value": true, + "points": 2, + "category": "Boolean", + "item": "문구 (생산가능인구)/① 각주 설정 및 문구 입력" + }, + "26": { + "path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape", + "searchValue": "전체 인구가 늘더라도 생산가능인구가 감소한다면 생산가능인구가 짊어져야 하는 비용은 증가한다.", + "value": "굴림", + "points": 1, + "category": "FontName", + "item": "문구 (생산가능인구)/② 글씨체 (굴림)" + }, + "27": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape]/@Height", + "searchValue": "전체 인구가 늘더라도 생산가능인구가 감소한다면 생산가능인구가 짊어져야 하는 비용은 증가한다.", + "value": "900", + "points": 1, + "category": "OneAnswer", + "item": "문구 (생산가능인구)/③ 크기 (9pt)" + }, + "28": { + "path": "//P[TEXT[CHAR[contains(text(), '{searchValue}')]]]//AUTONUMFORMAT/@Type", + "searchValue": "전체 인구가 늘더라도 생산가능인구가 감소한다면 생산가능인구가 짊어져야 하는 비용은 증가한다.", + "value": "DecagonCircleHanja", + "points": 2, + "category": "OneAnswer", + "item": "문구 (전당)/④ 각주 번호모양", + "desc": { + "가,나,다": "HangulSyllable", + "1,2,3": "Digit", + "일,이,삼": "HangulPhonetic", + "갑,을,병": "DecagonCircle", + "A,B,C": "LatinCapital", + "a,b,c": "LatinSmall", + "Ⓐ,Ⓑ,Ⓒ": "CircledLatinCapital", + "①,②,③": "CircledDigit", + "一,二,三": "Ideograph", + "㉠,㉡,㉢": "CircledHangulJamo", + "ⓐ,ⓑ,ⓒ": "CircledLatinSmall", + "㊀,㊁,㊂": "CircledIdeograph", + "i,ii,iii": "RomanSmall", + "I,II,III": "RomanCapital", + "甲,乙,丙": "DecagonCircleHanja", + "+,++,+++": "UserChar", + "*,**,***": "UserChar", + "정답에 맞는 값 value에 입력": "" + } + }, + "29": { + "path": "boolean(//CHAR[contains(text(),'{ignoreWord}')])", + "ignoreWord": "Disaster", + "value": true, + "points": 3, + "category": "Boolean", + "item": "Disaster/영단어 미입력, 대소문자/오타 시 전체 감점", + "desc": "유사도 검사를 진행하지 않고 영단어가 모두 일치해야 하므로 xpath구문 내 단어도 수정필요" + }, + "30": { + "path": "//CHAR[contains(text(),'{kor}')][contains(text(),'{chn}')]", + "word": [ + ["이론", "理論"], + ["분포", "分布"], + ["확산", "擴散"], + ["변화", "變化"], + ["확대", "擴大"] + ], + "value": 10, + "points": 10, + "category": "Hanja", + "item": "① 이론(理論), ② 분포(分布), ③ 확산(擴散), ④ 변화(變化), ⑤ 확대(擴大)" + }, + "31": { + "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'지기시작')])", + "value": true, + "points": 3, + "category": "Boolean", + "item": "문구 (…기점으로 시작하는 약해지기 현상을…)>'시작하는' / '약해지기' 순서바꿈" + }, + "32": { + "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'취업기회')])", + "value": true, + "points": 3, + "category": "Boolean", + "item": "문구 (…청년들의 취협 기회도…)>'협' → '업' 글자바꿈" + }, + "33": { + "path": "//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape", + "searchValue": "OECD 주요국 합계출산율", + "value": "궁서", + "points": 1, + "category": "FontName", + "item": "제목 문구 (OECD 주요국 합계출산율)/① 글씨체 (궁서)" + }, + "34": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "OECD 주요국 합계출산율", + "value": "1200", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (OECD 주요국 합계출산율)/② 크기 (1200)" + }, + "35": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "OECD 주요국 합계출산율", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "제목 문구 (OECD 주요국 합계출산율)/③ 진하게" + }, + "36": { + "path": "//PARASHAPE[@Id=//P[.//CHAR[text()='{searchValue}']]/@ParaShape]/@Align", + "searchValue": "OECD 주요국 합계출산율", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (OECD 주요국 합계출산율)/④ 정렬 (가운데 정렬)" + }, + "37": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor", + "value": "247,159,100", + "points": 2, + "category": "Color", + "item": "위쪽 제목 셀/① 색상(RGB:247,159,100)" + }, + "38": { + "path": "//CHARSHAPE[@Id=//TABLE/ROW[1]/descendant::TEXT/@CharShape]", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "위쪽 제목 셀/② 진하게", + "desc": "글자 속성이라 CELLZONE으로 적용 되지 않음" + }, + "39": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Type", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/BOTTOMBORDER/@Type", + "value": "DoubleSlim", + "points": 2, + "category": "TableAnswer", + "item": "제목 셀 아래선/① 이중실선" + }, + "40": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Width", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/BOTTOMBORDER/@Width", + "value": "0.5mm", + "points": 2, + "category": "TableAnswer", + "item": "제목 셀 아래선/② 0.5mm" + }, + "41": { + "path": "//TABLE//TEXT/@CharShape", + "path2": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/FONTID/@Hangul]/@Name", + "value": "돋움체", + "points": 1, + "category": "TableFontName", + "category_tmp": "FontName", + "item": "글자모양/① 글씨체 (돋움체)", + "desc": "테이블 폰트명 문항은 테이블의 모든 셀이 정답폰트와 일치해야 함, 하나만 일치해도 정답으로 채점할 경우 category값을 FontName으로 변경" + }, + "42": { + "path": "//CHARSHAPE[@Id=//TABLE//TEXT/@CharShape]/@Height", + "value": "1000", + "points": 1, + "category": "TableAnswer", + "item": "글자모양/② 크기 (1000)" + }, + "43": { + "path": "//PARASHAPE[@Id=//TABLE/ROW//P/@ParaShape]/@Align", + "value": "Center", + "points": 1, + "category": "TableAnswer", + "item": "글자모양/③ 정렬 (가운데 정렬)" + }, + "44": { + "path": "boolean(//TABLE[1]/ROW[last()]/CELL[position()=last()]//FIELDBEGIN[starts-with(@Command, '={option}')]) or boolean(//TABLE[1]/ROW[last()]/CELL[position()=last()-1]//FIELDBEGIN[starts-with(@Command, '={option}')])", + "option": "AVG", + "value": true, + "points": 4, + "category": "Boolean", + "item": "블록 계산식/합계", + "desc": "option값에 합계는 SUM / 평균은 AVG" + }, + "45": { + "chart_xpath": "", + "chart_type": "꺾은선형", + "value": true, + "points": 2, + "category": "ChartType", + "item": "① 종류 (꺾은선형)", + "desc": "chart_type을 입력받아 차트타입에 맞는 xml요소가 있는지 내부적으로 검사, chart_type만 한글로 입력해주면 된다. (공백무시)" + }, + "46": { + "chart_xpath": "//c:valAx/c:majorTickMark/@val", + "value": "out", + "points": 2, + "category": "ChartOneAnswer", + "item": "② 값 축 주 눈금선", + "desc": "chart xml파일에서 답안을 가져오는 문항은 path키값 대신 chart_xpath키값을 이용해 xapth구문을 작성한다" + }, + "47": { + "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]//SIZE/@Width", + "value": "80", + "points": 2, + "category": "mmSize", + "item": "③ 크기-너비 (80 mm)" + }, + "48": { + "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]//SIZE/@Height", + "value": "90", + "points": 2, + "category": "mmSize", + "item": "④ 크기-높이 (90 mm)" + }, + "49": { + "chart_xpath": "boolean(//c:chart and not(//c:pt[not(ancestor::c:tx)]/c:v[text()='합계' or text()='평균']))", + "value": true, + "points": 2, + "category": "Boolean", + "item": "⑤ 차트 데이터(표에서 블록계산식을 제외한 나머지 값만 이용)", + "desc": "차트가 존재하고 블록계산식(합계, 평균) 데이터가 없는 경우 정답 처리" + }, + "50": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r//a:ea/@typeface", + "searchValue": "OECD 주요국 합계출산율", + "value": "돋움", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (OECD 주요국 합계출산율)/① 글씨체 (돋움)" + }, + "51": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@sz", + "searchValue": "OECD 주요국 합계출산율", + "value": "1300", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (OECD 주요국 합계출산율)/② 크기 (1300)" + }, + "52": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@{option}", + "option": "b", + "searchValue": "OECD 주요국 합계출산율", + "value": "1", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (OECD 주요국 합계출산율)/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "53": { + "chart_xpath": "//c:catAx/c:txPr//a:ea/@typeface", + "value": "굴림체", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/① 글꼴 (굴림체)" + }, + "54": { + "chart_xpath": "//c:catAx/c:txPr//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/② 크기 (9pt)" + }, + "55": { + "chart_xpath": "//c:catAx/c:txPr//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "56": { + "chart_xpath": "//c:valAx/c:txPr//a:ea/@typeface", + "value": "굴림체", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/① 글꼴 (굴림체)" + }, + "57": { + "chart_xpath": "//c:valAx/c:txPr//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/② 크기 (9pt)" + }, + "58": { + "chart_xpath": "//c:valAx/c:txPr//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "59": { + "chart_xpath": "//c:legend//a:ea/@typeface", + "value": "굴림체", + "points": 1, + "category": "OneAnswer", + "item": "범례/① 글꼴 (굴림체)" + }, + "60": { + "chart_xpath": "//c:legend//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "OneAnswer", + "item": "범례/② 크기 (9pt)" + }, + "61": { + "chart_xpath": "//c:legend//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "OneAnswer", + "item": "범례/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + } + } +} diff --git a/DIW_2601_2A.json b/DIW_2601_2A copy 2.json similarity index 100% rename from DIW_2601_2A.json rename to DIW_2601_2A copy 2.json diff --git a/checklist.xbook b/checklist.xbook index a08c325..3f978e8 100644 --- a/checklist.xbook +++ b/checklist.xbook @@ -1 +1 @@ -[{"kind":1,"language":"markdown","value":"# XPath Notebook\nDate: 2025-01-22     Time: 16:12:58"},{"kind":1,"language":"markdown","value":"* mm > pt 변환비율 = 2.83465 \r\n* 283.465"},{"kind":1,"language":"markdown","value":"- 색상 demical 코드 [1-2] [1-10] [2-8] [2-37]"},{"kind":2,"language":"xpath","value":"//TEXTART[@Text='클라우드컴퓨팅컨퍼런스']/descendant::WINDOWBRUSH/@FaceColor"},{"kind":2,"language":"xpath","value":"//RECTANGLE[.//CHAR[text()='전']]//WINDOWBRUSH/@FaceColor"},{"kind":2,"language":"xpath","value":"//RECTANGLE//CHAR[text()='클라우드 컴퓨팅']/ancestor::RECTANGLE/descendant::WINDOWBRUSH/@FaceColor"},{"kind":2,"language":"xpath","value":"//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor"},{"kind":1,"language":"markdown","value":"- [1-10] ① ●, ② ●, ③ ※"},{"kind":2,"language":"xpath","value":"\"path\": \"count(//CHAR[contains(text(),'●')]) + count(//CHAR[contains(text(),'※')])\",\r\n \"path2\": \"string-length(//CHAR[contains(text(),'●')]) - string-length(translate(//CHAR[contains(text(),'●')], '●', '')) + string-length(//CHAR[contains(text(),'※')]) - string-length(translate(//CHAR[contains(text(),'※')], '※', ''))\","},{"kind":1,"language":"markdown","value":"- [1-28] [2-28] @FormatType 종류\r\n - HangulSyllable : 가나다\r\n - Digit : 123\r\n - DecagonCircle : 갑을병정\r\n - LatinCapital : ABC\r\n - CircledDigit : ①,②,③\r\n - Ideograph : 一,二,三\r\n - CircledHangulJamo : ㉠,㉡,㉢\r\n - CircledLatinSmall : ⓐ,ⓑ,ⓒ\r\n - RomanSmall : i,ii,iii"},{"kind":2,"language":"xpath","value":"//SECTION[1]//PAGENUM/@FormatType"},{"kind":2,"language":"xpath","value":"//P[TEXT[CHAR[contains(text(), '눈으로 읽는 대신 귀로 들을 수 있게 책의 내용(문자)을 음성으로 녹음하여 기록한 것을 의미함')]]]//AUTONUMFORMAT/@Type"},{"kind":1,"language":"markdown","value":"- [2-30] ① 저감(低減), ② 화석(化石), ③ 투자(投資), ④ 달성(達成), ⑤ 세금(稅金)"},{"kind":2,"language":"xpath","value":"(count(//CHAR[contains(text(),'저감')][contains(text(),'低減')])+count(//CHAR[contains(text(),'화석')][contains(text(),'化石')])+count(//CHAR[contains(text(),'투자')][contains(text(),'投資')])+count(//CHAR[contains(text(),'달성')][contains(text(),'達成')])+count(//CHAR[contains(text(),'세금')][contains(text(),'稅金')]))*2"},{"kind":1,"language":"markdown","value":"- [2-37] [2-39] [2-40] @EndColAddr 속성값 \r\n - 표의 열 갯수-1\r\n - 4개=3 / 3개=2 / 2개=1"},{"kind":2,"language":"xpath","value":"@EndColAddr='2'"},{"kind":1,"language":"markdown","value":"- [2-45]\r\n - 꺾은선형 //c:lineChart[c:grouping[@val='standard']]\r\n - 묶은가로막대형 //c:barChart[c:barDir[@val='bar'] and c:grouping[@val='clustered']]\r\n - 묶은세로막대형 //c:barChart[c:barDir[@val='col'] and c:grouping[@val='clustered']]\r\n - 원형 //c:pieChart\r\n - 분산형 //c:scatterChart"},{"kind":1,"language":"markdown","value":"//c:{chart_type}Chart/"},{"kind":2,"language":"xpath","value":"boolean(//c:barChart[c:barDir[@val='col'] and c:grouping[@val='clustered']])"},{"kind":2,"language":"xpath","value":"//c:valAx/c:majorTickMark/@val"}] \ No newline at end of file +[{"kind":1,"language":"markdown","value":"# XPath Notebook\nDate: 2025-01-22     Time: 16:12:58"},{"kind":1,"language":"markdown","value":"* mm > pt 변환비율 = 2.83465 \r\n* 283.465"},{"kind":1,"language":"markdown","value":"- 색상 demical 코드 [1-2] [1-10] [2-8] [2-37]"},{"kind":2,"language":"xpath","value":"//TEXTART[@Text='클라우드컴퓨팅컨퍼런스']/descendant::WINDOWBRUSH/@FaceColor"},{"kind":2,"language":"xpath","value":"//RECTANGLE[.//CHAR[text()='전']]//WINDOWBRUSH/@FaceColor"},{"kind":2,"language":"xpath","value":"//RECTANGLE//CHAR[text()='클라우드 컴퓨팅']/ancestor::RECTANGLE/descendant::WINDOWBRUSH/@FaceColor"},{"kind":2,"language":"xpath","value":"//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor"},{"kind":1,"language":"markdown","value":"- [1-10] ① ●, ② ●, ③ ※"},{"kind":2,"language":"xpath","value":"\"path\": \"count(//CHAR[contains(text(),'●')]) + count(//CHAR[contains(text(),'※')])\",\r\n \"path2\": \"string-length(//CHAR[contains(text(),'●')]) - string-length(translate(//CHAR[contains(text(),'●')], '●', '')) + string-length(//CHAR[contains(text(),'※')]) - string-length(translate(//CHAR[contains(text(),'※')], '※', ''))\","},{"kind":1,"language":"markdown","value":"- [1-28] [2-28] @FormatType 종류\r\n - HangulSyllable : 가나다\r\n - Digit : 123\r\n - DecagonCircle : 갑을병정\r\n - LatinCapital : ABC\r\n - CircledDigit : ①,②,③\r\n - Ideograph : 一,二,三\r\n - CircledHangulJamo : ㉠,㉡,㉢\r\n - CircledLatinSmall : ⓐ,ⓑ,ⓒ\r\n - RomanSmall : i,ii,iii"},{"kind":2,"language":"xpath","value":"//SECTION[1]//PAGENUM/@FormatType"},{"kind":2,"language":"xpath","value":"//P[TEXT[CHAR[contains(text(), '눈으로 읽는 대신 귀로 들을 수 있게 책의 내용(문자)을 음성으로 녹음하여 기록한 것을 의미함')]]]//AUTONUMFORMAT/@Type"},{"kind":1,"language":"markdown","value":"- [2-30] ① 저감(低減), ② 화석(化石), ③ 투자(投資), ④ 달성(達成), ⑤ 세금(稅金)"},{"kind":2,"language":"xpath","value":"(count(//CHAR[contains(text(),'저감')][contains(text(),'低減')])+count(//CHAR[contains(text(),'화석')][contains(text(),'化石')])+count(//CHAR[contains(text(),'투자')][contains(text(),'投資')])+count(//CHAR[contains(text(),'달성')][contains(text(),'達成')])+count(//CHAR[contains(text(),'세금')][contains(text(),'稅金')]))*2"},{"kind":1,"language":"markdown","value":"- [2-37] [2-39] [2-40] @EndColAddr 속성값 \r\n - 표의 열 갯수-1\r\n - 4개=3 / 3개=2 / 2개=1"},{"kind":2,"language":"xpath","value":"@EndColAddr='2'"},{"kind":1,"language":"markdown","value":"- [2-45]\r\n - 꺾은선형 //c:lineChart[c:grouping[@val='standard']]\r\n - 묶은가로막대형 //c:barChart[c:barDir[@val='bar'] and c:grouping[@val='clustered']]\r\n - 묶은세로막대형 //c:barChart[c:barDir[@val='col'] and c:grouping[@val='clustered']]\r\n - 원형 //c:pieChart\r\n - 분산형 //c:scatterChart"},{"kind":1,"language":"markdown","value":"//c:{chart_type}Chart/"},{"kind":2,"language":"xpath","value":"boolean(//c:barChart[c:barDir[@val='col'] and c:grouping[@val='clustered']])"},{"kind":2,"language":"xpath","value":"//c:valAx/c:majorTickMark/@val"},{"kind":2,"language":"xpath","value":"boolean(//TABLE[1]/ROW[last()]/CELL[position()=last()]//FIELDBEGIN[starts-with(@Command, '={option}')]) and boolean(//TABLE[1]/ROW[last()]/CELL[position()=last()-1]//FIELDBEGIN[starts-with(@Command, '={option}')])"},{"kind":2,"language":"xpath","value":"//TABLE[1]/ROW[last()]/CELL[position()=last()]//FIELDBEGIN[starts-with(@Command, '=AVG')]"},{"kind":2,"language":"xpath","value":"//TABLE[1]/ROW[last()]/CELL[position()=last()-1]//FIELDBEGIN[starts-with(@Command, '=AVG')]"}] \ No newline at end of file diff --git a/diwScoring2.py b/diwScoring2.py index 4600a78..b8ba4aa 100644 --- a/diwScoring2.py +++ b/diwScoring2.py @@ -1474,19 +1474,19 @@ class XMLScorer: def main(): # 시험회차 및 유형 - exam_round = '2601_2' + exam_round = '2601' # exam_round = '2522' # 채점하고자 하는 유형은 주석 해제 exam_types = [ - 'A', + # 'A', # 'B', - # 'C', + 'C', # 'D', ] - # test_mode = False - test_mode = True #/TEST 폴더 채점시 + test_mode = False + # test_mode = True #/TEST 폴더 채점시 output_excel_paths = [] for exam_type in exam_types: diff --git a/hwp_conversion.log b/hwp_conversion.log index 8ec4e99..373d67d 100644 --- a/hwp_conversion.log +++ b/hwp_conversion.log @@ -27770,3 +27770,16 @@ 2026-01-22 17:04:50,228 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2601_2\D\DIW -> D:\project\HWP\HWP-Scoring\output\2601_2\D\DIW 2026-01-22 17:04:50,729 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2601_2\E\DIW -> D:\project\HWP\HWP-Scoring\output\2601_2\E\DIW 2026-01-22 17:04:51,952 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2601_2\E\DIW -> D:\project\HWP\HWP-Scoring\output\2601_2\E\DIW +2026-01-27 15:46:11,567 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2601\A\DIW -> D:\project\HWP\HWP-Scoring\output\2601\A\DIW +2026-01-27 15:46:15,862 - INFO - 변환 성공: DIW_2601A.hwpx -> DIW_2601A.hml +2026-01-27 15:46:16,331 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2601\A\DIW -> D:\project\HWP\HWP-Scoring\output\2601\A\DIW +2026-01-27 15:46:16,832 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2601\B\DIW -> D:\project\HWP\HWP-Scoring\output\2601\B\DIW +2026-01-27 15:46:19,143 - INFO - 변환 성공: DIW_2601B.hwpx -> DIW_2601B.hml +2026-01-27 15:46:19,579 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2601\B\DIW -> D:\project\HWP\HWP-Scoring\output\2601\B\DIW +2026-01-27 15:46:20,080 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2601\C\DIW -> D:\project\HWP\HWP-Scoring\output\2601\C\DIW +2026-01-27 15:46:22,672 - INFO - 변환 성공: DIW_2601C.hwpx -> DIW_2601C.hml +2026-01-27 15:46:23,101 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2601\C\DIW -> D:\project\HWP\HWP-Scoring\output\2601\C\DIW +2026-01-27 15:46:23,602 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2601\D\DIW -> D:\project\HWP\HWP-Scoring\output\2601\D\DIW +2026-01-27 15:46:25,042 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2601\D\DIW -> D:\project\HWP\HWP-Scoring\output\2601\D\DIW +2026-01-27 15:46:25,543 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2601\E\DIW -> D:\project\HWP\HWP-Scoring\output\2601\E\DIW +2026-01-27 15:46:26,851 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2601\E\DIW -> D:\project\HWP\HWP-Scoring\output\2601\E\DIW diff --git a/회차별채점자료/2601/DIW_2601A.hwpx b/회차별채점자료/2601/DIW_2601A.hwpx new file mode 100644 index 0000000..d22bed0 Binary files /dev/null and b/회차별채점자료/2601/DIW_2601A.hwpx differ diff --git a/회차별채점자료/2601/DIW_2601A.json b/회차별채점자료/2601/DIW_2601A.json new file mode 100644 index 0000000..9ac210e --- /dev/null +++ b/회차별채점자료/2601/DIW_2601A.json @@ -0,0 +1,850 @@ +{ + "0": { + "0": { + "path": "", + "path2": "", + "points": 0, + "category": "파일저장", + "item": "파일명 (수검번호.hwp/hwpx)" + }, + "1": { + "path": "//PAGEMARGIN", + "value": { + "Top": 20, + "Bottom": 20, + "Left": 20, + "Right": 20, + "Header": 10, + "Footer": 10, + "Gutter": 0 + }, + "tolerance": 1, + "points": 4, + "category": "PageSetting", + "item": "A4용지, 왼쪽/오른쪽/위쪽/아래쪽 (각20mm), 머리말/꼬리말 (10mm), 제본(0mm)" + }, + "2": { + "path": "", + "value": { + "FontName": "바탕", + "FontSize": "1000", + "Alignment": "Justify", + "LineSpacing": "160" + }, + "points": 4, + "category": "BasicSetting", + "item": "글꼴 (바탕, 10pt), 양쪽정렬, 줄간격 (160%)" + }, + "3": { + "path": "", + "value": null, + "points": 40, + "category": "오타감점", + "item": "오타 1개 -1점 / 2503회부터 오타 1개 -1점으로 변경" + } + }, + "1": { + "1": { + "path": "//TEXTART[@Text='{searchValue}']/TEXTARTSHAPE/@FontName", + "searchValue": "한국평생교육학회학술포럼", + "value": "궁서체", + "points": 1, + "category": "OneAnswer", + "item": "문구 (한국평생교육학회학술포럼)/① 글씨체 (궁서체)" + }, + "2": { + "path": "//TEXTART[@Text='{searchValue}']/descendant::WINDOWBRUSH/@FaceColor", + "searchValue": "한국평생교육학회학술포럼", + "value": "48,117,196", + "points": 2, + "category": "Color", + "item": "문구 (한국평생교육학회학술포럼)/② 채우기 : 색상(RGB:48,117,196)" + }, + "3": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Width", + "searchValue": "한국평생교육학회학술포럼", + "value": "130", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "문구 (한국평생교육학회학술포럼)/③ 크기-너비 (130 mm)" + }, + "4": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Height", + "searchValue": "한국평생교육학회학술포럼", + "value": "20", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "문구 (한국평생교육학회학술포럼)/④ 크기-높이 (20 mm)" + }, + "5": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/POSITION/@TreatAsChar", + "searchValue": "한국평생교육학회학술포럼", + "value": "true", + "points": 2, + "category": "OneAnswer", + "item": "문구 (한국평생교육학회학술포럼)/⑤ 위치 (글자처럼 취급)" + }, + "6": { + "path": "//PARASHAPE[@Id=//P[.//TEXTART[@Text='{searchValue}']]/@ParaShape]/@Align", + "searchValue": "한국평생교육학회학술포럼", + "value": "Center", + "points": 2, + "category": "OneAnswer", + "item": "문구 (한국평생교육학회학술포럼)/⑥ 정렬 (가운데 정렬)" + }, + "7": { + "path": "//TEXTART[@Text='{searchValue}']", + "searchValue": "한국평생교육학회학술포럼", + "value": true, + "points": 2, + "category": "Boolean", + "item": "문구 (한국평생교육학회학술포럼)/⑦ 글맵시모양 (육안확인)" + }, + "8": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/SIZE", + "searchValue": "한", + "value": { + "Height": 2800, + "Width": 2800 + }, + "tolerance": 200, + "points": 1, + "category": "TwoLineSize", + "item": "어/① 모양 (2줄)" + }, + "9": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "한", + "value": "굴림", + "points": 1, + "category": "FontName", + "item": "어/② 글씨체 (굴림)" + }, + "10": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor", + "searchValue": "한", + "value": "248,190,122", + "points": 2, + "category": "Color", + "item": "어/③ 면색 : 색상(RGB:248,190,122)" + }, + "11": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//OUTSIDEMARGIN/@Right", + "searchValue": "한", + "value": "3.0", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "어/④ 본문과의 간격 : 3.0mm" + }, + "12": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]", + "searchValue": "평생교육사 양성 교육과정 현황과 개선 방안 탐색", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구 (평생교육사 양성 교육과정 현황과 개선 방안 탐색)/① BOLD" + }, + "13": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]", + "searchValue": "평생교육사 양성 교육과정 현황과 개선 방안 탐색", + "value": "UNDERLINE", + "points": 1, + "category": "FontAttribute", + "item": "문구 (평생교육사 양성 교육과정 현황과 개선 방안 탐색)/② UNDERLINE" + }, + "14": { + "path": "//CHAR[contains(string(.),'{char1}')]/text()", + "path2": "//CHAR[contains(string(.),'{char2}')]/text()", + "path3": "//CHAR[contains(string(.),'{char3}')]/text()", + "char1": "◆", + "char2": "◆", + "char3": "※", + "value": 3, + "points": 3, + "category": "SpecialChar", + "item": "① ◆, ② ◆, ③ ※" + }, + "15": { + "path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape", + "searchValue": "행사안내", + "value": "궁서", + "points": 1, + "category": "FontName", + "item": "문구 (◆ 행사안내 ◆)/① 글씨체 (궁서)" + }, + "16": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{match_str}')]/ancestor::P/@ParaShape]/@Align", + "match_str": "행사안내", + "value": "Center", + "points": 1, + "category": "Align", + "item": "문구 (◆ 행사안내 ◆)/② 정렬 (가운데 정렬)" + }, + "17": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]", + "searchValue": "한국평생교육학회 홈페이지(http://www.ihd.or.kr) 참조", + "value": "ITALIC", + "points": 1, + "category": "FontAttribute", + "item": "문구 (한국평생교육학회 홈페이지(http://www.ihd.or.kr) 참조)/① ITALIC" + }, + "18": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]", + "searchValue": "한국평생교육학회 홈페이지(http://www.ihd.or.kr) 참조", + "value": "UNDERLINE", + "points": 1, + "category": "FontAttribute", + "item": "문구 (한국평생교육학회 홈페이지(http://www.ihd.or.kr) 참조)/② UNDERLINE" + }, + "19": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN", + "searchValue": "기타사항", + "value": { + "Left": 15, + "Indent": 12 + }, + "points": 2, + "category": "ParaShape", + "item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (15), 내어쓰기 (12)", + "desc": "내부적으로 내어쓰기는 음수값 / JSON value값은 양수로 입력" + }, + "20": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height", + "searchValue": "2026. 01. 24.", + "value": "1300", + "points": 1, + "category": "OneAnswer", + "item": "문구 (2026. 01. 24.)/① 크기 (1300)", + "desc": "1pt당 100" + }, + "21": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align", + "searchValue": "2026. 01. 24.", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "문구 (2026. 01. 24.)/② 정렬 (가운데 정렬)" + }, + "22": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "한국평생교육학회", + "value": "견고딕", + "points": 1, + "category": "FontName", + "item": "문구 (한국평생교육학회)/① 글씨체 (견고딕)" + }, + "23": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "한국평생교육학회", + "value": "2500", + "points": 1, + "category": "OneAnswer", + "item": "문구 (한국평생교육학회)/② 크기 (2500)" + }, + "24": { + "path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/ancestor::P/@ParaShape]/@Align", + "searchValue": "한국평생교육학회", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "문구 (한국평생교육학회)/③ 정렬 (가운데 정렬)" + }, + "25": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "DIAT", + "value": "굴림체", + "points": 1, + "category": "Header.FontName", + "item": "문구 (DIAT)/① 글꼴 (굴림체)" + }, + "26": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "DIAT", + "value": "900", + "points": 1, + "category": "Header.OneAnswer", + "item": "문구 (DIAT)/② 크기 (9pt)" + }, + "27": { + "path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/parent::P/@ParaShape]/@Align", + "searchValue": "DIAT", + "value": "Right", + "points": 1, + "category": "Header.OneAnswer", + "item": "문구 (DIAT)/③ 정렬 (오른쪽 정렬)" + }, + "28": { + "path": "//PAGENUM/@FormatType", + "value": "LatinCapital", + "points": 2, + "category": "PageNumber", + "item": "① 쪽 번호 매기기 (가,나,다 순으로)", + "desc1": { + "가,나,다": "HangulSyllable", + "1,2,3": "Digit", + "일,이,삼": "HangulPhonetic", + "갑,을,병": "DecagonCircle", + "A,B,C": "LatinCapital", + "a,b,c": "LatinSmall", + "Ⓐ,Ⓑ,Ⓒ": "CircledLatinCapital", + "①,②,③": "CircledDigit", + "一,二,三": "Ideograph", + "㉠,㉡,㉢": "CircledHangulJamo", + "ⓐ,ⓑ,ⓒ": "CircledLatinSmall", + "㊀,㊁,㊂": "CircledIdeograph", + "i,ii,iii": "RomanSmall", + "I,II,III": "RomanCapital", + "甲,乙,丙": "DecagonCircleHanja", + "+,++,+++": "UserChar", + "*,**,***": "UserChar", + "정답에 맞는 값 value에 입력": "" + }, + "desc2": "1, 2페이지 모두 정답이어야 점수 부여" + }, + "29": { + "path": "//PAGENUM/@Pos", + "value": "BottomRight", + "points": 2, + "category": "PageNumber", + "item": "오른쪽 아래", + "desc": "1, 2페이지 모두 정답이어야 점수 부여", + "desc2": { + "가운데 아래": "BottomCenter", + "오른쪽 아래": "BottomRight", + "왼쪽 아래": "BottomLeft" + } + }, + "30": { + "path": "//CHAR[contains(text(),'{searchValue}')]", + "searchValue": "http", + "value": true, + "points": 2, + "category": "hyperlink", + "item": "문구 (http://www.ihd.or.kr)/하이퍼링크 없이 작성", + "desc": "searchValue에 해당하는 주소 문구에 하이퍼링크가 하나라도 설정되어 있으면 오답" + }, + "31": { + "path": "//PARASHAPE[@Id='{parashape_id}']/PARAMARGIN/@LineSpacing", + "value": "200", + "first_word": "한", + "points": 2, + "category": "LineSpacing", + "item": "문제 1 줄간격 200% 설정", + "desc": "1페이지 문단의 줄간격이 정답이 아닌 문단이 있으면 False(감점), first_word 속성에 [문단 첫글자 장식]에 해당하는 글자를 입력해준다." + } + }, + "2": { + "1": { + "path": "//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@HeaderInside", + "path2": "//BORDERFILL[@Id=//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@BorferFill]", + "value": { + "header_inside": true, + "all_double_slim": true + }, + "points": 4, + "category": "PageBorder", + "item": "문제2 쪽테두리(이중 실선, 머리말 포함) 설정" + }, + "2": { + "path": "count(//SECTION)>1", + "value": true, + "points": 3, + "category": "Boolean", + "item": "① 구역나누기", + "desc": "섹션이 1개 이상이면 점수부여" + }, + "3": { + "path": "./TEXT/COLDEF/@Count", + "value": "2", + "points": 3, + "category": "TwoColumn", + "item": "② 다단 2단" + }, + "4": { + "path": "//RECTANGLE/SHAPEOBJECT/SIZE/@Width", + "value": "65", + "points": 2, + "category": "Rectangle.mmSize", + "item": "문구 (평생교육시대)/① 크기-너비 (65 mm)" + }, + "5": { + "path": "//RECTANGLE/SHAPEOBJECT/SIZE/@Height", + "value": "12", + "points": 2, + "category": "Rectangle.mmSize", + "item": "문구 (평생교육시대)/② 크기-높이 (12 mm)" + }, + "6": { + "path": "//RECTANGLE//LINESHAPE", + "value": { + "Style": "DoubleSlim", + "Width": "283" + }, + "points": 2, + "category": "Rectangle.LineShape", + "item": "문구 (평생교육시대)/③ 테두리 : 이중 실선(1.00mm)", + "desc": "1mm = 283pt value['Width']에 pt값 입력" + }, + "7": { + "path": "//RECTANGLE/@Ratio", + "value": "20", + "points": 2, + "category": "Rectangle.OneAnswer", + "item": "문구 (평생교육시대)/④ 글상자 모서리 (둥근모양)", + "desc": "모서리 비율 반원:50 / 둥근모양:20" + }, + "8": { + "path": "//RECTANGLE//WINDOWBRUSH/@FaceColor", + "value": "224,122,146", + "points": 2, + "category": "Rectangle.Color", + "item": "문구 (평생교육시대)/⑤ 채우기 : 색상(RGB:224,122,146)" + }, + "9": { + "path": "//RECTANGLE/SHAPEOBJECT/POSITION/@TreatAsChar", + "value": "true", + "points": 1, + "category": "Rectangle.OneAnswer", + "item": "문구 (평생교육시대)/⑥ 글상자 위치 (글자처럼 취급)" + }, + "10": { + "path": "//PARASHAPE[@Id='{rect_parashape_id}']/@Align", + "value": "Center", + "points": 1, + "category": "Rectangle.TextBoxAlign", + "item": "문구 (평생교육시대)/⑦ 글상자 정렬 (가운데 정렬)" + }, + "11": { + "path": ".//RECTANGLE//TEXT/@CharShape", + "value": "휴먼옛체", + "points": 1, + "category": "Rectangle.FontName", + "item": "문구 (평생교육시대)/⑧ 글씨체 (휴먼옛체)" + }, + "12": { + "path": "//CHARSHAPE[@Id='{rect_charshape_id}']/@Height", + "value": "2000", + "points": 1, + "category": "Rectangle.FontSize", + "item": "문구 (평생교육시대)/⑨ 글씨크기 (2000)", + "desc": "1pt당 100" + }, + "13": { + "path": "//PARASHAPE[@Id={rect_parashape_id}]/@Align", + "value": "Center", + "points": 1, + "category": "Rectangle.TextBoxAlign", + "item": "문구 (평생교육시대)/⑩ 정렬 (가운데 정렬)" + }, + "14": { + "path": "//BINITEM[@BinData=//PICTURE/IMAGE/@BinItem][@Format='JPG' or @Format='JPEG' or @Format='PNG']", + "value": true, + "points": 2, + "category": "Boolean", + "item": "① 파일명 \"그림A.jpg\" 삽입", + "desc": "첨부 이미지 파일명 손상으로 정상적인 채점이 불가한 경우가 발견되어서 이미지 첨부 여부로 채점 방식 변경 (7/3)" + }, + "15": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/SIZE/@Width", + "value": "80", + "points": 2, + "category": "mmSize", + "item": "② 크기-너비 (80 mm)" + }, + "16": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/SIZE/@Height", + "value": "40", + "points": 2, + "category": "mmSize", + "item": "③ 크기-높이 (40 mm)" + }, + "17": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@HorzOffset", + "value": "0", + "points": 2, + "category": "mmSize", + "item": "④ 위치 (어울림 : 가로-쪽의 왼쪽 0mm)" + }, + "18": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@VertOffset", + "value": "24", + "points": 2, + "category": "mmSize", + "item": "⑤ 위치 (어울림 : 세로-쪽의 위 24 mm)" + }, + "19": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "1. 평생교육이란?", + "value": "굴림", + "points": 1, + "category": "FontName", + "item": "문구① (1. 평생교육이란?)/① 글씨체 (굴림)" + }, + "20": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "1. 평생교육이란?", + "value": "1200", + "points": 1, + "category": "OneAnswer", + "item": "문구① (1. 평생교육이란?)/② 크기 (1200)" + }, + "21": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "1. 평생교육이란?", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구① (1. 평생교육이란?)/③ 진하게" + }, + "22": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "2. 평생교육사의 개념", + "value": "굴림", + "points": 1, + "category": "FontName", + "item": "문구② (2. 평생교육사의 개념)/① 글씨체 (굴림)" + }, + "23": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "2. 평생교육사의 개념", + "value": "1200", + "points": 1, + "category": "OneAnswer", + "item": "문구② (2. 평생교육사의 개념)/② 크기 (1200)" + }, + "24": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "2. 평생교육사의 개념", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구② (2. 평생교육사의 개념)/③ 진하게" + }, + "25": { + "path": "boolean(//TEXT[CHAR[contains(text(),'{option}')]]/FOOTNOTE)", + "path2": "boolean(//CHAR[substring(., string-length(.) - string-length('{option}') + 1) = '{option}']/following-sibling::FOOTNOTE/descendant::CHAR)", + "option": "유네스코", + "value": true, + "points": 2, + "category": "Boolean", + "item": "문구 (유네스코)/① 각주 설정 및 문구 입력" + }, + "26": { + "path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape", + "searchValue": "교육, 과학, 문화의 보급 및 교류를 통하여 국가 간의 협력 증진을 목적으로 설립된 국제연합전문기구", + "value": "궁서", + "points": 1, + "category": "FontName", + "item": "문구 (유네스코)/② 글씨체 (궁서)" + }, + "27": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape]/@Height", + "searchValue": "교육, 과학, 문화의 보급 및 교류를 통하여 국가 간의 협력 증진을 목적으로 설립된 국제연합전문기구", + "value": "900", + "points": 1, + "category": "OneAnswer", + "item": "문구 (유네스코)/③ 크기 (9pt)" + }, + "28": { + "path": "//P[TEXT[CHAR[contains(text(), '{searchValue}')]]]//AUTONUMFORMAT/@Type", + "searchValue": "교육, 과학, 문화의 보급 및 교류를 통하여 국가 간의 협력 증진을 목적으로 설립된 국제연합전문기구", + "value": "UserChar", + "points": 2, + "category": "OneAnswer", + "item": "문구 (전당)/④ 각주 번호모양", + "desc": { + "가,나,다": "HangulSyllable", + "1,2,3": "Digit", + "일,이,삼": "HangulPhonetic", + "갑,을,병": "DecagonCircle", + "A,B,C": "LatinCapital", + "a,b,c": "LatinSmall", + "Ⓐ,Ⓑ,Ⓒ": "CircledLatinCapital", + "①,②,③": "CircledDigit", + "一,二,三": "Ideograph", + "㉠,㉡,㉢": "CircledHangulJamo", + "ⓐ,ⓑ,ⓒ": "CircledLatinSmall", + "㊀,㊁,㊂": "CircledIdeograph", + "i,ii,iii": "RomanSmall", + "I,II,III": "RomanCapital", + "甲,乙,丙": "DecagonCircleHanja", + "+,++,+++": "UserChar", + "*,**,***": "UserChar", + "정답에 맞는 값 value에 입력": "" + } + }, + "29": { + "path": "boolean(//CHAR[contains(text(),'{ignoreWord}')])", + "ignoreWord": "Development", + "value": true, + "points": 3, + "category": "Boolean", + "item": "Development/영단어 미입력, 대소문자/오타 시 전체 감점", + "desc": "유사도 검사를 진행하지 않고 영단어가 모두 일치해야 하므로 xpath구문 내 단어도 수정필요" + }, + "30": { + "path": "//CHAR[contains(text(),'{kor}')][contains(text(),'{chn}')]", + "word": [ + ["평생", "平生"], + ["교육", "敎育"], + ["신념", "信念"], + ["현장", "現場"], + ["자격", "資格"] + ], + "value": 10, + "points": 10, + "category": "Hanja", + "item": "① 평생(平生), ② 교육(敎育), ③ 신념(信念), ④ 현장(現場), ⑤ 자격(資格)" + }, + "31": { + "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'하는사람')])", + "value": true, + "points": 3, + "category": "Boolean", + "item": "문구 (…어느 하나에 사람에게 해당하는 평생교육사의…)>'사람에게' / '해당하는' 순서바꿈" + }, + "32": { + "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'21과목이다')])", + "value": true, + "points": 3, + "category": "Boolean", + "item": "문구 (…총 21종목이다…)>'종' → '과' 글자바꿈" + }, + "33": { + "path": "//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape", + "searchValue": "평생교육사 자격증 발급(단위: 명)", + "value": "돋움", + "points": 1, + "category": "FontName", + "item": "제목 문구 (평생교육사 자격증 발급(단위: 명))/① 글씨체 (돋움)" + }, + "34": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "평생교육사 자격증 발급(단위: 명)", + "value": "1200", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (평생교육사 자격증 발급(단위: 명))/② 크기 (1200)" + }, + "35": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "평생교육사 자격증 발급(단위: 명)", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "제목 문구 (평생교육사 자격증 발급(단위: 명))/③ 진하게" + }, + "36": { + "path": "//PARASHAPE[@Id=//P[.//CHAR[text()='{searchValue}']]/@ParaShape]/@Align", + "searchValue": "평생교육사 자격증 발급(단위: 명)", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (평생교육사 자격증 발급(단위: 명))/④ 정렬 (가운데 정렬)" + }, + "37": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor", + "value": "233,174,43", + "points": 2, + "category": "Color", + "item": "위쪽 제목 셀/① 색상(RGB:233,174,43)" + }, + "38": { + "path": "//CHARSHAPE[@Id=//TABLE/ROW[1]/descendant::TEXT/@CharShape]", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "위쪽 제목 셀/② 진하게", + "desc": "글자 속성이라 CELLZONE으로 적용 되지 않음" + }, + "39": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Type", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/BOTTOMBORDER/@Type", + "value": "DoubleSlim", + "points": 2, + "category": "TableAnswer", + "item": "제목 셀 아래선/① 이중실선" + }, + "40": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Width", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/BOTTOMBORDER/@Width", + "value": "0.5mm", + "points": 2, + "category": "TableAnswer", + "item": "제목 셀 아래선/② 0.5mm" + }, + "41": { + "path": "//TABLE//TEXT/@CharShape", + "path2": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/FONTID/@Hangul]/@Name", + "value": "중고딕", + "points": 1, + "category": "TableFontName", + "category_tmp": "FontName", + "item": "글자모양/① 글씨체 (중고딕)", + "desc": "테이블 폰트명 문항은 테이블의 모든 셀이 정답폰트와 일치해야 함, 하나만 일치해도 정답으로 채점할 경우 category값을 FontName으로 변경" + }, + "42": { + "path": "//CHARSHAPE[@Id=//TABLE//TEXT/@CharShape]/@Height", + "value": "1000", + "points": 1, + "category": "TableAnswer", + "item": "글자모양/② 크기 (1000)" + }, + "43": { + "path": "//PARASHAPE[@Id=//TABLE/ROW//P/@ParaShape]/@Align", + "value": "Center", + "points": 1, + "category": "TableAnswer", + "item": "글자모양/③ 정렬 (가운데 정렬)" + }, + "44": { + "path": "boolean(//TABLE[1]/ROW[last()]/CELL[position()=last()]//FIELDBEGIN[starts-with(@Command, '={option}')]) and boolean(//TABLE[1]/ROW[last()]/CELL[position()=last()-1]//FIELDBEGIN[starts-with(@Command, '={option}')])", + "option": "SUM", + "value": true, + "points": 4, + "category": "Boolean", + "item": "블록 계산식/합계", + "desc": "option값에 합계는 SUM / 평균은 AVG" + }, + "45": { + "chart_xpath": "", + "chart_type": "묶은 세로 막대형", + "value": true, + "points": 2, + "category": "ChartType", + "item": "① 종류 (묶은 세로 막대형)", + "desc": "chart_type을 입력받아 차트타입에 맞는 xml요소가 있는지 내부적으로 검사, chart_type만 한글로 입력해주면 된다. (공백무시)" + }, + "46": { + "chart_xpath": "//c:valAx/c:majorTickMark/@val", + "value": "out", + "points": 2, + "category": "ChartOneAnswer", + "item": "② 값 축 주 눈금선", + "desc": "chart xml파일에서 답안을 가져오는 문항은 path키값 대신 chart_xpath키값을 이용해 xapth구문을 작성한다" + }, + "47": { + "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]//SIZE/@Width", + "value": "80", + "points": 2, + "category": "mmSize", + "item": "③ 크기-너비 (80 mm)" + }, + "48": { + "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]//SIZE/@Height", + "value": "90", + "points": 2, + "category": "mmSize", + "item": "④ 크기-높이 (90 mm)" + }, + "49": { + "chart_xpath": "boolean(//c:chart and not(//c:pt[not(ancestor::c:tx)]/c:v[text()='합계' or text()='평균']))", + "value": true, + "points": 2, + "category": "Boolean", + "item": "⑤ 차트 데이터(표에서 블록계산식을 제외한 나머지 값만 이용)", + "desc": "차트가 존재하고 블록계산식(합계, 평균) 데이터가 없는 경우 정답 처리" + }, + "50": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r//a:ea/@typeface", + "searchValue": "평생교육사 자격증 발급", + "value": "바탕체", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (평생교육사 자격증 발급)/① 글씨체 (바탕체)" + }, + "51": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@sz", + "searchValue": "평생교육사 자격증 발급", + "value": "1300", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (평생교육사 자격증 발급)/② 크기 (1300)" + }, + "52": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@{option}", + "option": "b", + "searchValue": "평생교육사 자격증 발급", + "value": "1", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (평생교육사 자격증 발급)/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "53": { + "chart_xpath": "//c:catAx/c:txPr//a:ea/@typeface", + "value": "돋움체", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/① 글꼴 (돋움체)" + }, + "54": { + "chart_xpath": "//c:catAx/c:txPr//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/② 크기 (9pt)" + }, + "55": { + "chart_xpath": "//c:catAx/c:txPr//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "56": { + "chart_xpath": "//c:valAx/c:txPr//a:ea/@typeface", + "value": "돋움체", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/① 글꼴 (돋움체)" + }, + "57": { + "chart_xpath": "//c:valAx/c:txPr//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/② 크기 (9pt)" + }, + "58": { + "chart_xpath": "//c:valAx/c:txPr//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "59": { + "chart_xpath": "//c:legend//a:ea/@typeface", + "value": "돋움체", + "points": 1, + "category": "OneAnswer", + "item": "범례/① 글꼴 (돋움체)" + }, + "60": { + "chart_xpath": "//c:legend//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "OneAnswer", + "item": "범례/② 크기 (9pt)" + }, + "61": { + "chart_xpath": "//c:legend//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "OneAnswer", + "item": "범례/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + } + } +} diff --git a/회차별채점자료/2601/DIW_2601A_문제.hwpx b/회차별채점자료/2601/DIW_2601A_문제.hwpx new file mode 100644 index 0000000..338cebc Binary files /dev/null and b/회차별채점자료/2601/DIW_2601A_문제.hwpx differ diff --git a/회차별채점자료/2601/DIW_2601A_채점기준표.xlsx b/회차별채점자료/2601/DIW_2601A_채점기준표.xlsx new file mode 100644 index 0000000..bca8038 Binary files /dev/null and b/회차별채점자료/2601/DIW_2601A_채점기준표.xlsx differ diff --git a/회차별채점자료/2601/DIW_2601B.hwpx b/회차별채점자료/2601/DIW_2601B.hwpx new file mode 100644 index 0000000..2285105 Binary files /dev/null and b/회차별채점자료/2601/DIW_2601B.hwpx differ diff --git a/회차별채점자료/2601/DIW_2601B.json b/회차별채점자료/2601/DIW_2601B.json new file mode 100644 index 0000000..fdd6633 --- /dev/null +++ b/회차별채점자료/2601/DIW_2601B.json @@ -0,0 +1,850 @@ +{ + "0": { + "0": { + "path": "", + "path2": "", + "points": 0, + "category": "파일저장", + "item": "파일명 (수검번호.hwp/hwpx)" + }, + "1": { + "path": "//PAGEMARGIN", + "value": { + "Top": 20, + "Bottom": 20, + "Left": 20, + "Right": 20, + "Header": 10, + "Footer": 10, + "Gutter": 0 + }, + "tolerance": 1, + "points": 4, + "category": "PageSetting", + "item": "A4용지, 왼쪽/오른쪽/위쪽/아래쪽 (각20mm), 머리말/꼬리말 (10mm), 제본(0mm)" + }, + "2": { + "path": "", + "value": { + "FontName": "바탕", + "FontSize": "1000", + "Alignment": "Justify", + "LineSpacing": "160" + }, + "points": 4, + "category": "BasicSetting", + "item": "글꼴 (바탕, 10pt), 양쪽정렬, 줄간격 (160%)" + }, + "3": { + "path": "", + "value": null, + "points": 40, + "category": "오타감점", + "item": "오타 1개 -1점 / 2503회부터 오타 1개 -1점으로 변경" + } + }, + "1": { + "1": { + "path": "//TEXTART[@Text='{searchValue}']/TEXTARTSHAPE/@FontName", + "searchValue": "전국제과제빵박람회", + "value": "견고딕", + "points": 1, + "category": "OneAnswer", + "item": "문구 (전국제과제빵박람회)/① 글씨체 (견고딕)" + }, + "2": { + "path": "//TEXTART[@Text='{searchValue}']/descendant::WINDOWBRUSH/@FaceColor", + "searchValue": "전국제과제빵박람회", + "value": "49,95,151", + "points": 2, + "category": "Color", + "item": "문구 (전국제과제빵박람회)/② 채우기 : 색상(RGB:49,95,151)" + }, + "3": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Width", + "searchValue": "전국제과제빵박람회", + "value": "110", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "문구 (전국제과제빵박람회)/③ 크기-너비 (110 mm)" + }, + "4": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Height", + "searchValue": "전국제과제빵박람회", + "value": "20", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "문구 (전국제과제빵박람회)/④ 크기-높이 (20 mm)" + }, + "5": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/POSITION/@TreatAsChar", + "searchValue": "전국제과제빵박람회", + "value": "true", + "points": 2, + "category": "OneAnswer", + "item": "문구 (전국제과제빵박람회)/⑤ 위치 (글자처럼 취급)" + }, + "6": { + "path": "//PARASHAPE[@Id=//P[.//TEXTART[@Text='{searchValue}']]/@ParaShape]/@Align", + "searchValue": "전국제과제빵박람회", + "value": "Center", + "points": 2, + "category": "OneAnswer", + "item": "문구 (전국제과제빵박람회)/⑥ 정렬 (가운데 정렬)" + }, + "7": { + "path": "//TEXTART[@Text='{searchValue}']", + "searchValue": "전국제과제빵박람회", + "value": true, + "points": 2, + "category": "Boolean", + "item": "문구 (전국제과제빵박람회)/⑦ 글맵시모양 (육안확인)" + }, + "8": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/SIZE", + "searchValue": "제", + "value": { + "Height": 2800, + "Width": 2800 + }, + "tolerance": 200, + "points": 1, + "category": "TwoLineSize", + "item": "어/① 모양 (2줄)" + }, + "9": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "제", + "value": "궁서", + "points": 1, + "category": "FontName", + "item": "어/② 글씨체 (궁서)" + }, + "10": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor", + "searchValue": "제", + "value": "66,227,189", + "points": 2, + "category": "Color", + "item": "어/③ 면색 : 색상(RGB:66,227,189)" + }, + "11": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//OUTSIDEMARGIN/@Right", + "searchValue": "제", + "value": "3.0", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "어/④ 본문과의 간격 : 3.0mm" + }, + "12": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]", + "searchValue": "국내 유일의 제과제빵 전문 박람회", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구 (국내 유일의 제과제빵 전문 박람회)/① BOLD" + }, + "13": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]", + "searchValue": "국내 유일의 제과제빵 전문 박람회", + "value": "UNDERLINE", + "points": 1, + "category": "FontAttribute", + "item": "문구 (국내 유일의 제과제빵 전문 박람회)/② UNDERLINE" + }, + "14": { + "path": "//CHAR[contains(string(.),'{char1}')]/text()", + "path2": "//CHAR[contains(string(.),'{char2}')]/text()", + "path3": "//CHAR[contains(string(.),'{char3}')]/text()", + "char1": "★", + "char2": "★", + "char3": "※", + "value": 3, + "points": 3, + "category": "SpecialChar", + "item": "① ★, ② ★, ③ ※" + }, + "15": { + "path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape", + "searchValue": "행사안내", + "value": "굴림", + "points": 1, + "category": "FontName", + "item": "문구 (★ 행사안내 ★)/① 글씨체 (굴림)" + }, + "16": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{match_str}')]/ancestor::P/@ParaShape]/@Align", + "match_str": "행사안내", + "value": "Center", + "points": 1, + "category": "Align", + "item": "문구 (★ 행사안내 ★)/② 정렬 (가운데 정렬)" + }, + "17": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]", + "searchValue": "홈페이지(http://www.ihd.or.kr) 게시판 또는 전화(02-123-4567) 접수", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구 (홈페이지(http://www.ihd.or.kr) 게시판 또는 전화(02-123-4567) 접수)/① BOLD" + }, + "18": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]", + "searchValue": "홈페이지(http://www.ihd.or.kr) 게시판 또는 전화(02-123-4567) 접수", + "value": "ITALIC", + "points": 1, + "category": "FontAttribute", + "item": "문구 (홈페이지(http://www.ihd.or.kr) 게시판 또는 전화(02-123-4567) 접수)/② ITALIC" + }, + "19": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN", + "searchValue": "기타사항", + "value": { + "Left": 12, + "Indent": 10 + }, + "points": 2, + "category": "ParaShape", + "item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (12), 내어쓰기 (10)", + "desc": "내부적으로 내어쓰기는 음수값 / JSON value값은 양수로 입력" + }, + "20": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height", + "searchValue": "2026. 01. 24.", + "value": "1300", + "points": 1, + "category": "OneAnswer", + "item": "문구 (2026. 01. 24.)/① 크기 (1300)", + "desc": "1pt당 100" + }, + "21": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align", + "searchValue": "2026. 01. 24.", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "문구 (2026. 01. 24.)/② 정렬 (가운데 정렬)" + }, + "22": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "대한제과제빵협회", + "value": "궁서체", + "points": 1, + "category": "FontName", + "item": "문구 (대한제과제빵협회)/① 글씨체 (궁서체)" + }, + "23": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "대한제과제빵협회", + "value": "2200", + "points": 1, + "category": "OneAnswer", + "item": "문구 (대한제과제빵협회)/② 크기 (2200)" + }, + "24": { + "path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/ancestor::P/@ParaShape]/@Align", + "searchValue": "대한제과제빵협회", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "문구 (대한제과제빵협회)/③ 정렬 (가운데 정렬)" + }, + "25": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "DIAT", + "value": "굴림", + "points": 1, + "category": "Header.FontName", + "item": "문구 (DIAT)/① 글꼴 (굴림)" + }, + "26": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "DIAT", + "value": "900", + "points": 1, + "category": "Header.OneAnswer", + "item": "문구 (DIAT)/② 크기 (9pt)" + }, + "27": { + "path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/parent::P/@ParaShape]/@Align", + "searchValue": "DIAT", + "value": "Right", + "points": 1, + "category": "Header.OneAnswer", + "item": "문구 (DIAT)/③ 정렬 (오른쪽 정렬)" + }, + "28": { + "path": "//PAGENUM/@FormatType", + "value": "LatinCapital", + "points": 2, + "category": "PageNumber", + "item": "① 쪽 번호 매기기 (가,나,다 순으로)", + "desc1": { + "가,나,다": "HangulSyllable", + "1,2,3": "Digit", + "일,이,삼": "HangulPhonetic", + "갑,을,병": "DecagonCircle", + "A,B,C": "LatinCapital", + "a,b,c": "LatinSmall", + "Ⓐ,Ⓑ,Ⓒ": "CircledLatinCapital", + "①,②,③": "CircledDigit", + "一,二,三": "Ideograph", + "㉠,㉡,㉢": "CircledHangulJamo", + "ⓐ,ⓑ,ⓒ": "CircledLatinSmall", + "㊀,㊁,㊂": "CircledIdeograph", + "i,ii,iii": "RomanSmall", + "I,II,III": "RomanCapital", + "甲,乙,丙": "DecagonCircleHanja", + "+,++,+++": "UserChar", + "*,**,***": "UserChar", + "정답에 맞는 값 value에 입력": "" + }, + "desc2": "1, 2페이지 모두 정답이어야 점수 부여" + }, + "29": { + "path": "//PAGENUM/@Pos", + "value": "BottomCenter", + "points": 2, + "category": "PageNumber", + "item": "가운데 아래", + "desc": "1, 2페이지 모두 정답이어야 점수 부여", + "desc2": { + "가운데 아래": "BottomCenter", + "오른쪽 아래": "BottomRight", + "왼쪽 아래": "BottomLeft" + } + }, + "30": { + "path": "//CHAR[contains(text(),'{searchValue}')]", + "searchValue": "http", + "value": true, + "points": 2, + "category": "hyperlink", + "item": "문구 (http://www.ihd.or.kr)/하이퍼링크 없이 작성", + "desc": "searchValue에 해당하는 주소 문구에 하이퍼링크가 하나라도 설정되어 있으면 오답" + }, + "31": { + "path": "//PARASHAPE[@Id='{parashape_id}']/PARAMARGIN/@LineSpacing", + "value": "190", + "first_word": "제", + "points": 2, + "category": "LineSpacing", + "item": "문제 1 줄간격 190% 설정", + "desc": "1페이지 문단의 줄간격이 정답이 아닌 문단이 있으면 False(감점), first_word 속성에 [문단 첫글자 장식]에 해당하는 글자를 입력해준다." + } + }, + "2": { + "1": { + "path": "//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@HeaderInside", + "path2": "//BORDERFILL[@Id=//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@BorferFill]", + "value": { + "header_inside": true, + "all_double_slim": true + }, + "points": 4, + "category": "PageBorder", + "item": "문제2 쪽테두리(이중 실선, 머리말 포함) 설정" + }, + "2": { + "path": "count(//SECTION)>1", + "value": true, + "points": 3, + "category": "Boolean", + "item": "① 구역나누기", + "desc": "섹션이 1개 이상이면 점수부여" + }, + "3": { + "path": "./TEXT/COLDEF/@Count", + "value": "2", + "points": 3, + "category": "TwoColumn", + "item": "② 다단 2단" + }, + "4": { + "path": "//RECTANGLE/SHAPEOBJECT/SIZE/@Width", + "value": "50", + "points": 2, + "category": "Rectangle.mmSize", + "item": "문구 (제과제빵)/① 크기-너비 (50 mm)" + }, + "5": { + "path": "//RECTANGLE/SHAPEOBJECT/SIZE/@Height", + "value": "12", + "points": 2, + "category": "Rectangle.mmSize", + "item": "문구 (제과제빵)/② 크기-높이 (12 mm)" + }, + "6": { + "path": "//RECTANGLE//LINESHAPE", + "value": { + "Style": "DoubleSlim", + "Width": "283" + }, + "points": 2, + "category": "Rectangle.LineShape", + "item": "문구 (제과제빵)/③ 테두리 : 이중 실선(1.00mm)", + "desc": "1mm = 283pt value['Width']에 pt값 입력" + }, + "7": { + "path": "//RECTANGLE/@Ratio", + "value": "20", + "points": 2, + "category": "Rectangle.OneAnswer", + "item": "문구 (제과제빵)/④ 글상자 모서리 (둥근모양)", + "desc": "모서리 비율 반원:50 / 둥근모양:20" + }, + "8": { + "path": "//RECTANGLE//WINDOWBRUSH/@FaceColor", + "value": "202,86,167", + "points": 2, + "category": "Rectangle.Color", + "item": "문구 (제과제빵)/⑤ 채우기 : 색상(RGB:202,86,167)" + }, + "9": { + "path": "//RECTANGLE/SHAPEOBJECT/POSITION/@TreatAsChar", + "value": "true", + "points": 1, + "category": "Rectangle.OneAnswer", + "item": "문구 (제과제빵)/⑥ 글상자 위치 (글자처럼 취급)" + }, + "10": { + "path": "//PARASHAPE[@Id='{rect_parashape_id}']/@Align", + "value": "Center", + "points": 1, + "category": "Rectangle.TextBoxAlign", + "item": "문구 (제과제빵)/⑦ 글상자 정렬 (가운데 정렬)" + }, + "11": { + "path": ".//RECTANGLE//TEXT/@CharShape", + "value": "돋움체", + "points": 1, + "category": "Rectangle.FontName", + "item": "문구 (제과제빵)/⑧ 글씨체 (돋움체)" + }, + "12": { + "path": "//CHARSHAPE[@Id='{rect_charshape_id}']/@Height", + "value": "2000", + "points": 1, + "category": "Rectangle.FontSize", + "item": "문구 (제과제빵)/⑨ 글씨크기 (2000)", + "desc": "1pt당 100" + }, + "13": { + "path": "//PARASHAPE[@Id={rect_parashape_id}]/@Align", + "value": "Center", + "points": 1, + "category": "Rectangle.TextBoxAlign", + "item": "문구 (제과제빵)/⑩ 정렬 (가운데 정렬)" + }, + "14": { + "path": "//BINITEM[@BinData=//PICTURE/IMAGE/@BinItem][@Format='JPG' or @Format='JPEG' or @Format='PNG']", + "value": true, + "points": 2, + "category": "Boolean", + "item": "① 파일명 \"그림B.jpg\" 삽입", + "desc": "첨부 이미지 파일명 손상으로 정상적인 채점이 불가한 경우가 발견되어서 이미지 첨부 여부로 채점 방식 변경 (7/3)" + }, + "15": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/SIZE/@Width", + "value": "80", + "points": 2, + "category": "mmSize", + "item": "② 크기-너비 (80 mm)" + }, + "16": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/SIZE/@Height", + "value": "40", + "points": 2, + "category": "mmSize", + "item": "③ 크기-높이 (40 mm)" + }, + "17": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@HorzOffset", + "value": "0", + "points": 2, + "category": "mmSize", + "item": "④ 위치 (어울림 : 가로-쪽의 왼쪽 0mm)" + }, + "18": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@VertOffset", + "value": "24", + "points": 2, + "category": "mmSize", + "item": "⑤ 위치 (어울림 : 세로-쪽의 위 24 mm)" + }, + "19": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "1. 제과제빵이란?", + "value": "돋움", + "points": 1, + "category": "FontName", + "item": "문구① (1. 제과제빵이란?)/① 글씨체 (돋움)" + }, + "20": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "1. 제과제빵이란?", + "value": "1200", + "points": 1, + "category": "OneAnswer", + "item": "문구① (1. 제과제빵이란?)/② 크기 (1200)" + }, + "21": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "1. 제과제빵이란?", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구① (1. 제과제빵이란?)/③ 진하게" + }, + "22": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "2. 설탕 공예", + "value": "돋움", + "points": 1, + "category": "FontName", + "item": "문구② (2. 설탕 공예)/① 글씨체 (돋움)" + }, + "23": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "2. 설탕 공예", + "value": "1200", + "points": 1, + "category": "OneAnswer", + "item": "문구② (2. 설탕 공예)/② 크기 (1200)" + }, + "24": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "2. 설탕 공예", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구② (2. 설탕 공예)/③ 진하게" + }, + "25": { + "path": "boolean(//TEXT[CHAR[contains(text(),'{option}')]]/FOOTNOTE)", + "path2": "boolean(//CHAR[substring(., string-length(.) - string-length('{option}') + 1) = '{option}']/following-sibling::FOOTNOTE/descendant::CHAR)", + "option": "가니쉬", + "value": true, + "points": 2, + "category": "Boolean", + "item": "문구 (가니쉬)/① 각주 설정 및 문구 입력" + }, + "26": { + "path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape", + "searchValue": "음식의 외형을 돋보이게 하기 위해 장식 또는 곁들임으로 사용되는 식재료", + "value": "굴림", + "points": 1, + "category": "FontName", + "item": "문구 (가니쉬)/② 글씨체 (굴림)" + }, + "27": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape]/@Height", + "searchValue": "음식의 외형을 돋보이게 하기 위해 장식 또는 곁들임으로 사용되는 식재료", + "value": "900", + "points": 1, + "category": "OneAnswer", + "item": "문구 (가니쉬)/③ 크기 (9pt)" + }, + "28": { + "path": "//P[TEXT[CHAR[contains(text(), '{searchValue}')]]]//AUTONUMFORMAT/@Type", + "searchValue": "음식의 외형을 돋보이게 하기 위해 장식 또는 곁들임으로 사용되는 식재료", + "value": "RomanSmall", + "points": 2, + "category": "OneAnswer", + "item": "문구 (전당)/④ 각주 번호모양", + "desc": { + "가,나,다": "HangulSyllable", + "1,2,3": "Digit", + "일,이,삼": "HangulPhonetic", + "갑,을,병": "DecagonCircle", + "A,B,C": "LatinCapital", + "a,b,c": "LatinSmall", + "Ⓐ,Ⓑ,Ⓒ": "CircledLatinCapital", + "①,②,③": "CircledDigit", + "一,二,三": "Ideograph", + "㉠,㉡,㉢": "CircledHangulJamo", + "ⓐ,ⓑ,ⓒ": "CircledLatinSmall", + "㊀,㊁,㊂": "CircledIdeograph", + "i,ii,iii": "RomanSmall", + "I,II,III": "RomanCapital", + "甲,乙,丙": "DecagonCircleHanja", + "+,++,+++": "UserChar", + "*,**,***": "UserChar", + "정답에 맞는 값 value에 입력": "" + } + }, + "29": { + "path": "boolean(//CHAR[contains(text(),'{ignoreWord}')])", + "ignoreWord": "Chocolatier", + "value": true, + "points": 3, + "category": "Boolean", + "item": "Chocolatier/영단어 미입력, 대소문자/오타 시 전체 감점", + "desc": "유사도 검사를 진행하지 않고 영단어가 모두 일치해야 하므로 xpath구문 내 단어도 수정필요" + }, + "30": { + "path": "//CHAR[contains(text(),'{kor}')][contains(text(),'{chn}')]", + "word": [ + ["발효", "醱酵"], + ["제품", "製品"], + ["장식", "裝飾"], + ["표현", "表現"], + ["경향", "傾向"] + ], + "value": 10, + "points": 10, + "category": "Hanja", + "item": "① 발효(醱酵), ② 제품(製品), ③ 장식(裝飾), ④ 표현(表現), ⑤ 경향(傾向) " + }, + "31": { + "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'루를사용')])", + "value": true, + "points": 3, + "category": "Boolean", + "item": "문구 (…보통은 밀가루를 포용하지만…)>'포'→'사' 글자바꿈" + }, + "32": { + "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'람을불어')])", + "value": true, + "points": 3, + "category": "Boolean", + "item": "문구 (…뭉치기, 불어넣어 바람을 부풀리기 등의…)>'불어넣어 / 바람을' 순서바꿈" + }, + "33": { + "path": "//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape", + "searchValue": "연령별 박람회 참가자 현황(단위:명)", + "value": "굴림체", + "points": 1, + "category": "FontName", + "item": "제목 문구 (연령별 박람회 참가자 현황(단위:명))/① 글씨체 (굴림체)" + }, + "34": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "연령별 박람회 참가자 현황(단위:명)", + "value": "1100", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (연령별 박람회 참가자 현황(단위:명))/② 크기 (1100)" + }, + "35": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "연령별 박람회 참가자 현황(단위:명)", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "제목 문구 (연령별 박람회 참가자 현황(단위:명))/③ 진하게" + }, + "36": { + "path": "//PARASHAPE[@Id=//P[.//CHAR[text()='{searchValue}']]/@ParaShape]/@Align", + "searchValue": "연령별 박람회 참가자 현황(단위:명)", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (연령별 박람회 참가자 현황(단위:명))/④ 정렬 (가운데 정렬)" + }, + "37": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor", + "value": "233,225,43", + "points": 2, + "category": "Color", + "item": "위쪽 제목 셀/① 색상(RGB:233,225,43)" + }, + "38": { + "path": "//CHARSHAPE[@Id=//TABLE/ROW[1]/descendant::TEXT/@CharShape]", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "위쪽 제목 셀/② 진하게", + "desc": "글자 속성이라 CELLZONE으로 적용 되지 않음" + }, + "39": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Type", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/BOTTOMBORDER/@Type", + "value": "DoubleSlim", + "points": 2, + "category": "TableAnswer", + "item": "제목 셀 아래선/① 이중실선" + }, + "40": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Width", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/BOTTOMBORDER/@Width", + "value": "0.5mm", + "points": 2, + "category": "TableAnswer", + "item": "제목 셀 아래선/② 0.5mm" + }, + "41": { + "path": "//TABLE//TEXT/@CharShape", + "path2": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/FONTID/@Hangul]/@Name", + "value": "중고딕", + "points": 1, + "category": "TableFontName", + "category_tmp": "FontName", + "item": "글자모양/① 글씨체 (중고딕)", + "desc": "테이블 폰트명 문항은 테이블의 모든 셀이 정답폰트와 일치해야 함, 하나만 일치해도 정답으로 채점할 경우 category값을 FontName으로 변경" + }, + "42": { + "path": "//CHARSHAPE[@Id=//TABLE//TEXT/@CharShape]/@Height", + "value": "1000", + "points": 1, + "category": "TableAnswer", + "item": "글자모양/② 크기 (1000)" + }, + "43": { + "path": "//PARASHAPE[@Id=//TABLE/ROW//P/@ParaShape]/@Align", + "value": "Center", + "points": 1, + "category": "TableAnswer", + "item": "글자모양/③ 정렬 (가운데 정렬)" + }, + "44": { + "path": "boolean(//TABLE[1]/ROW[last()]/CELL[position()=last()]//FIELDBEGIN[starts-with(@Command, '={option}')]) and boolean(//TABLE[1]/ROW[last()]/CELL[position()=last()-1]//FIELDBEGIN[starts-with(@Command, '={option}')])", + "option": "SUM", + "value": true, + "points": 4, + "category": "Boolean", + "item": "블록 계산식/합계", + "desc": "option값에 합계는 SUM / 평균은 AVG" + }, + "45": { + "chart_xpath": "", + "chart_type": "묶은 가로 막대형", + "value": true, + "points": 2, + "category": "ChartType", + "item": "① 종류 (묶은 가로 막대형)", + "desc": "chart_type을 입력받아 차트타입에 맞는 xml요소가 있는지 내부적으로 검사, chart_type만 한글로 입력해주면 된다. (공백무시)" + }, + "46": { + "chart_xpath": "//c:valAx/c:majorTickMark/@val", + "value": "out", + "points": 2, + "category": "ChartOneAnswer", + "item": "② 값 축 주 눈금선", + "desc": "chart xml파일에서 답안을 가져오는 문항은 path키값 대신 chart_xpath키값을 이용해 xapth구문을 작성한다" + }, + "47": { + "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]//SIZE/@Width", + "value": "80", + "points": 2, + "category": "mmSize", + "item": "③ 크기-너비 (80 mm)" + }, + "48": { + "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]//SIZE/@Height", + "value": "90", + "points": 2, + "category": "mmSize", + "item": "④ 크기-높이 (90 mm)" + }, + "49": { + "chart_xpath": "boolean(//c:chart and not(//c:pt[not(ancestor::c:tx)]/c:v[text()='합계' or text()='평균']))", + "value": true, + "points": 2, + "category": "Boolean", + "item": "⑤ 차트 데이터(표에서 블록계산식을 제외한 나머지 값만 이용)", + "desc": "차트가 존재하고 블록계산식(합계, 평균) 데이터가 없는 경우 정답 처리" + }, + "50": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r//a:ea/@typeface", + "searchValue": "연령별 박람회 참가자 현황", + "value": "돋움체", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (연령별 박람회 참가자 현황)/① 글씨체 (돋움체)" + }, + "51": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@sz", + "searchValue": "연령별 박람회 참가자 현황", + "value": "1300", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (연령별 박람회 참가자 현황)/② 크기 (1300)" + }, + "52": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@{option}", + "option": "b", + "searchValue": "연령별 박람회 참가자 현황", + "value": "1", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (연령별 박람회 참가자 현황)/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "53": { + "chart_xpath": "//c:catAx/c:txPr//a:ea/@typeface", + "value": "바탕체", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/① 글꼴 (바탕체)" + }, + "54": { + "chart_xpath": "//c:catAx/c:txPr//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/② 크기 (9pt)" + }, + "55": { + "chart_xpath": "//c:catAx/c:txPr//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "56": { + "chart_xpath": "//c:valAx/c:txPr//a:ea/@typeface", + "value": "바탕체", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/① 글꼴 (바탕체)" + }, + "57": { + "chart_xpath": "//c:valAx/c:txPr//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/② 크기 (9pt)" + }, + "58": { + "chart_xpath": "//c:valAx/c:txPr//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "59": { + "chart_xpath": "//c:legend//a:ea/@typeface", + "value": "바탕체", + "points": 1, + "category": "OneAnswer", + "item": "범례/① 글꼴 (바탕체)" + }, + "60": { + "chart_xpath": "//c:legend//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "OneAnswer", + "item": "범례/② 크기 (9pt)" + }, + "61": { + "chart_xpath": "//c:legend//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "OneAnswer", + "item": "범례/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + } + } +} diff --git a/회차별채점자료/2601/DIW_2601B_문제.hwpx b/회차별채점자료/2601/DIW_2601B_문제.hwpx new file mode 100644 index 0000000..7f89475 Binary files /dev/null and b/회차별채점자료/2601/DIW_2601B_문제.hwpx differ diff --git a/회차별채점자료/2601/DIW_2601B_채점기준표.xlsx b/회차별채점자료/2601/DIW_2601B_채점기준표.xlsx new file mode 100644 index 0000000..b9ad29f Binary files /dev/null and b/회차별채점자료/2601/DIW_2601B_채점기준표.xlsx differ diff --git a/회차별채점자료/2601/DIW_2601C.hwpx b/회차별채점자료/2601/DIW_2601C.hwpx new file mode 100644 index 0000000..ad12d3c Binary files /dev/null and b/회차별채점자료/2601/DIW_2601C.hwpx differ diff --git a/회차별채점자료/2601/DIW_2601C.json b/회차별채점자료/2601/DIW_2601C.json new file mode 100644 index 0000000..2a4281e --- /dev/null +++ b/회차별채점자료/2601/DIW_2601C.json @@ -0,0 +1,850 @@ +{ + "0": { + "0": { + "path": "", + "path2": "", + "points": 0, + "category": "파일저장", + "item": "파일명 (수검번호.hwp/hwpx)" + }, + "1": { + "path": "//PAGEMARGIN", + "value": { + "Top": 20, + "Bottom": 20, + "Left": 20, + "Right": 20, + "Header": 10, + "Footer": 10, + "Gutter": 0 + }, + "tolerance": 1, + "points": 4, + "category": "PageSetting", + "item": "A4용지, 왼쪽/오른쪽/위쪽/아래쪽 (각20mm), 머리말/꼬리말 (10mm), 제본(0mm)" + }, + "2": { + "path": "", + "value": { + "FontName": "바탕", + "FontSize": "1000", + "Alignment": "Justify", + "LineSpacing": "160" + }, + "points": 4, + "category": "BasicSetting", + "item": "글꼴 (바탕, 10pt), 양쪽정렬, 줄간격 (160%)" + }, + "3": { + "path": "", + "value": null, + "points": 40, + "category": "오타감점", + "item": "오타 1개 -1점 / 2503회부터 오타 1개 -1점으로 변경" + } + }, + "1": { + "1": { + "path": "//TEXTART[@Text='{searchValue}']/TEXTARTSHAPE/@FontName", + "searchValue": "거창에살으리랏다", + "value": "견고딕", + "points": 1, + "category": "OneAnswer", + "item": "문구 (거창에살으리랏다)/① 글씨체 (견고딕)" + }, + "2": { + "path": "//TEXTART[@Text='{searchValue}']/descendant::WINDOWBRUSH/@FaceColor", + "searchValue": "거창에살으리랏다", + "value": "211,125,209", + "points": 2, + "category": "Color", + "item": "문구 (거창에살으리랏다)/② 채우기 : 색상(RGB:211,125,209)" + }, + "3": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Width", + "searchValue": "거창에살으리랏다", + "value": "110", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "문구 (거창에살으리랏다)/③ 크기-너비 (110 mm)" + }, + "4": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Height", + "searchValue": "거창에살으리랏다", + "value": "20", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "문구 (거창에살으리랏다)/④ 크기-높이 (20 mm)" + }, + "5": { + "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/POSITION/@TreatAsChar", + "searchValue": "거창에살으리랏다", + "value": "true", + "points": 2, + "category": "OneAnswer", + "item": "문구 (거창에살으리랏다)/⑤ 위치 (글자처럼 취급)" + }, + "6": { + "path": "//PARASHAPE[@Id=//P[.//TEXTART[@Text='{searchValue}']]/@ParaShape]/@Align", + "searchValue": "거창에살으리랏다", + "value": "Center", + "points": 2, + "category": "OneAnswer", + "item": "문구 (거창에살으리랏다)/⑥ 정렬 (가운데 정렬)" + }, + "7": { + "path": "//TEXTART[@Text='{searchValue}']", + "searchValue": "거창에살으리랏다", + "value": true, + "points": 2, + "category": "Boolean", + "item": "문구 (거창에살으리랏다)/⑦ 글맵시모양 (육안확인)" + }, + "8": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/SIZE", + "searchValue": "뉴", + "value": { + "Height": 2800, + "Width": 2800 + }, + "tolerance": 200, + "points": 1, + "category": "TwoLineSize", + "item": "어/① 모양 (2줄)" + }, + "9": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "뉴", + "value": "궁서체", + "points": 1, + "category": "FontName", + "item": "어/② 글씨체 (궁서체)" + }, + "10": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor", + "searchValue": "뉴", + "value": "174,227,120", + "points": 2, + "category": "Color", + "item": "어/③ 면색 : 색상(RGB:174,227,120)" + }, + "11": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//OUTSIDEMARGIN/@Right", + "searchValue": "뉴", + "value": "3.0", + "tolerance": 1, + "points": 2, + "category": "mmSize", + "item": "어/④ 본문과의 간격 : 3.0mm" + }, + "12": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]", + "searchValue": "저출산/고령화 수치(중위연령, 고령화지수, 출산율)", + "value": "ITALIC", + "points": 1, + "category": "FontAttribute", + "item": "문구 (저출산/고령화 수치(중위연령, 고령화지수, 출산율))/① ITALIC" + }, + "13": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]", + "searchValue": "저출산/고령화 수치(중위연령, 고령화지수, 출산율)", + "value": "UNDERLINE", + "points": 1, + "category": "FontAttribute", + "item": "문구 (저출산/고령화 수치(중위연령, 고령화지수, 출산율))/② UNDERLINE" + }, + "14": { + "path": "//CHAR[contains(string(.),'{char1}')]/text()", + "path2": "//CHAR[contains(string(.),'{char2}')]/text()", + "path3": "//CHAR[contains(string(.),'{char3}')]/text()", + "char1": "☆", + "char2": "☆", + "char3": "※", + "value": 3, + "points": 3, + "category": "SpecialChar", + "item": "① ☆, ② ☆, ③ ※" + }, + "15": { + "path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape", + "searchValue": "행사안내", + "value": "궁서", + "points": 1, + "category": "FontName", + "item": "문구 (☆ 행사안내 ☆)/① 글씨체 (궁서)" + }, + "16": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{match_str}')]/ancestor::P/@ParaShape]/@Align", + "match_str": "행사안내", + "value": "Center", + "points": 1, + "category": "Align", + "item": "문구 (☆ 행사안내 ☆)/② 정렬 (가운데 정렬)" + }, + "17": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]", + "searchValue": "2026. 01. 25.(일) 18:00까지 온라인으로 등록(http://www.ihd.or.kr)", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구 (2026. 01. 25.(일) 18:00까지 온라인으로 등록(http://www.ihd.or.kr))/① BOLD" + }, + "18": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]", + "searchValue": "2026. 01. 25.(일) 18:00까지 온라인으로 등록(http://www.ihd.or.kr)", + "value": "UNDERLINE", + "points": 1, + "category": "FontAttribute", + "item": "문구 (2026. 01. 25.(일) 18:00까지 온라인으로 등록(http://www.ihd.or.kr))/② UNDERLINE" + }, + "19": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN", + "searchValue": "기타사항", + "value": { + "Left": 15, + "Indent": 12 + }, + "points": 2, + "category": "ParaShape", + "item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (15), 내어쓰기 (12)", + "desc": "내부적으로 내어쓰기는 음수값 / JSON value값은 양수로 입력" + }, + "20": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height", + "searchValue": "2026. 01. 24.", + "value": "1300", + "points": 1, + "category": "OneAnswer", + "item": "문구 (2026. 01. 24.)/① 크기 (1300)", + "desc": "1pt당 100" + }, + "21": { + "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align", + "searchValue": "2026. 01. 24.", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "문구 (2026. 01. 24.)/② 정렬 (가운데 정렬)" + }, + "22": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "거창군청", + "value": "휴먼옛체", + "points": 1, + "category": "FontName", + "item": "문구 (거창군청)/① 글씨체 (휴먼옛체)" + }, + "23": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "거창군청", + "value": "2700", + "points": 1, + "category": "OneAnswer", + "item": "문구 (거창군청)/② 크기 (2700)" + }, + "24": { + "path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/ancestor::P/@ParaShape]/@Align", + "searchValue": "거창군청", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "문구 (거창군청)/③ 정렬 (가운데 정렬)" + }, + "25": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "DIAT", + "value": "돋움", + "points": 1, + "category": "Header.FontName", + "item": "문구 (DIAT)/① 글꼴 (돋움)" + }, + "26": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "DIAT", + "value": "900", + "points": 1, + "category": "Header.OneAnswer", + "item": "문구 (DIAT)/② 크기 (9pt)" + }, + "27": { + "path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/parent::P/@ParaShape]/@Align", + "searchValue": "DIAT", + "value": "Right", + "points": 1, + "category": "Header.OneAnswer", + "item": "문구 (DIAT)/③ 정렬 (오른쪽 정렬)" + }, + "28": { + "path": "//PAGENUM/@FormatType", + "value": "LatinCapital", + "points": 2, + "category": "PageNumber", + "item": "① 쪽 번호 매기기 (가,나,다 순으로)", + "desc1": { + "가,나,다": "HangulSyllable", + "1,2,3": "Digit", + "일,이,삼": "HangulPhonetic", + "갑,을,병": "DecagonCircle", + "A,B,C": "LatinCapital", + "a,b,c": "LatinSmall", + "Ⓐ,Ⓑ,Ⓒ": "CircledLatinCapital", + "①,②,③": "CircledDigit", + "一,二,三": "Ideograph", + "㉠,㉡,㉢": "CircledHangulJamo", + "ⓐ,ⓑ,ⓒ": "CircledLatinSmall", + "㊀,㊁,㊂": "CircledIdeograph", + "i,ii,iii": "RomanSmall", + "I,II,III": "RomanCapital", + "甲,乙,丙": "DecagonCircleHanja", + "+,++,+++": "UserChar", + "*,**,***": "UserChar", + "정답에 맞는 값 value에 입력": "" + }, + "desc2": "1, 2페이지 모두 정답이어야 점수 부여" + }, + "29": { + "path": "//PAGENUM/@Pos", + "value": "BottomCenter", + "points": 2, + "category": "PageNumber", + "item": "가운데 아래", + "desc": "1, 2페이지 모두 정답이어야 점수 부여", + "desc2": { + "가운데 아래": "BottomCenter", + "오른쪽 아래": "BottomRight", + "왼쪽 아래": "BottomLeft" + } + }, + "30": { + "path": "//CHAR[contains(text(),'{searchValue}')]", + "searchValue": "http", + "value": true, + "points": 2, + "category": "hyperlink", + "item": "문구 (http://www.ihd.or.kr)/하이퍼링크 없이 작성", + "desc": "searchValue에 해당하는 주소 문구에 하이퍼링크가 하나라도 설정되어 있으면 오답" + }, + "31": { + "path": "//PARASHAPE[@Id='{parashape_id}']/PARAMARGIN/@LineSpacing", + "value": "180", + "first_word": "뉴", + "points": 2, + "category": "LineSpacing", + "item": "문제 1 줄간격 180% 설정", + "desc": "1페이지 문단의 줄간격이 정답이 아닌 문단이 있으면 False(감점), first_word 속성에 [문단 첫글자 장식]에 해당하는 글자를 입력해준다." + } + }, + "2": { + "1": { + "path": "//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@HeaderInside", + "path2": "//BORDERFILL[@Id=//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@BorferFill]", + "value": { + "header_inside": true, + "all_double_slim": true + }, + "points": 4, + "category": "PageBorder", + "item": "문제2 쪽테두리(이중 실선, 머리말 포함) 설정" + }, + "2": { + "path": "count(//SECTION)>1", + "value": true, + "points": 3, + "category": "Boolean", + "item": "① 구역나누기", + "desc": "섹션이 1개 이상이면 점수부여" + }, + "3": { + "path": "./TEXT/COLDEF/@Count", + "value": "2", + "points": 3, + "category": "TwoColumn", + "item": "② 다단 2단" + }, + "4": { + "path": "//RECTANGLE/SHAPEOBJECT/SIZE/@Width", + "value": "65", + "points": 2, + "category": "Rectangle.mmSize", + "item": "문구 (인구절벽)/① 크기-너비 (65 mm)" + }, + "5": { + "path": "//RECTANGLE/SHAPEOBJECT/SIZE/@Height", + "value": "12", + "points": 2, + "category": "Rectangle.mmSize", + "item": "문구 (인구절벽)/② 크기-높이 (12 mm)" + }, + "6": { + "path": "//RECTANGLE//LINESHAPE", + "value": { + "Style": "DoubleSlim", + "Width": "283" + }, + "points": 2, + "category": "Rectangle.LineShape", + "item": "문구 (인구절벽)/③ 테두리 : 이중 실선(1.00mm)", + "desc": "1mm = 283pt value['Width']에 pt값 입력" + }, + "7": { + "path": "//RECTANGLE/@Ratio", + "value": "50", + "points": 2, + "category": "Rectangle.OneAnswer", + "item": "문구 (인구절벽)/④ 글상자 모서리 (둥근모양)", + "desc": "모서리 비율 반원:50 / 둥근모양:20" + }, + "8": { + "path": "//RECTANGLE//WINDOWBRUSH/@FaceColor", + "value": "244,220,42", + "points": 2, + "category": "Rectangle.Color", + "item": "문구 (인구절벽)/⑤ 채우기 : 색상(RGB:244,220,42)" + }, + "9": { + "path": "//RECTANGLE/SHAPEOBJECT/POSITION/@TreatAsChar", + "value": "true", + "points": 1, + "category": "Rectangle.OneAnswer", + "item": "문구 (인구절벽)/⑥ 글상자 위치 (글자처럼 취급)" + }, + "10": { + "path": "//PARASHAPE[@Id='{rect_parashape_id}']/@Align", + "value": "Center", + "points": 1, + "category": "Rectangle.TextBoxAlign", + "item": "문구 (인구절벽)/⑦ 글상자 정렬 (가운데 정렬)" + }, + "11": { + "path": ".//RECTANGLE//TEXT/@CharShape", + "value": "휴먼옛체", + "points": 1, + "category": "Rectangle.FontName", + "item": "문구 (인구절벽)/⑧ 글씨체 (휴먼옛체)" + }, + "12": { + "path": "//CHARSHAPE[@Id='{rect_charshape_id}']/@Height", + "value": "2000", + "points": 1, + "category": "Rectangle.FontSize", + "item": "문구 (인구절벽)/⑨ 글씨크기 (2000)", + "desc": "1pt당 100" + }, + "13": { + "path": "//PARASHAPE[@Id={rect_parashape_id}]/@Align", + "value": "Center", + "points": 1, + "category": "Rectangle.TextBoxAlign", + "item": "문구 (인구절벽)/⑩ 정렬 (가운데 정렬)" + }, + "14": { + "path": "//BINITEM[@BinData=//PICTURE/IMAGE/@BinItem][@Format='JPG' or @Format='JPEG' or @Format='PNG']", + "value": true, + "points": 2, + "category": "Boolean", + "item": "① 파일명 \"그림C.jpg\" 삽입", + "desc": "첨부 이미지 파일명 손상으로 정상적인 채점이 불가한 경우가 발견되어서 이미지 첨부 여부로 채점 방식 변경 (7/3)" + }, + "15": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/SIZE/@Width", + "value": "80", + "points": 2, + "category": "mmSize", + "item": "② 크기-너비 (80 mm)" + }, + "16": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/SIZE/@Height", + "value": "40", + "points": 2, + "category": "mmSize", + "item": "③ 크기-높이 (40 mm)" + }, + "17": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@HorzOffset", + "value": "0", + "points": 2, + "category": "mmSize", + "item": "④ 위치 (어울림 : 가로-쪽의 왼쪽 0mm)" + }, + "18": { + "path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG' or @Format='JPEG' or @Format='PNG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@VertOffset", + "value": "22", + "points": 2, + "category": "mmSize", + "item": "⑤ 위치 (어울림 : 세로-쪽의 위 22 mm)" + }, + "19": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "1. 인구절벽이란?", + "value": "중고딕", + "points": 1, + "category": "FontName", + "item": "문구① (1. 인구절벽이란?)/① 글씨체 (중고딕)" + }, + "20": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "1. 인구절벽이란?", + "value": "1200", + "points": 1, + "category": "OneAnswer", + "item": "문구① (1. 인구절벽이란?)/② 크기 (1200)" + }, + "21": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "1. 인구절벽이란?", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구① (1. 인구절벽이란?)/③ 진하게" + }, + "22": { + "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape", + "searchValue": "2. 인구절벽 대응책", + "value": "중고딕", + "points": 1, + "category": "FontName", + "item": "문구② (2. 인구절벽 대응책)/① 글씨체 (중고딕)" + }, + "23": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "2. 인구절벽 대응책", + "value": "1200", + "points": 1, + "category": "OneAnswer", + "item": "문구② (2. 인구절벽 대응책)/② 크기 (1200)" + }, + "24": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "2. 인구절벽 대응책", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "문구② (2. 인구절벽 대응책)/③ 진하게" + }, + "25": { + "path": "boolean(//TEXT[CHAR[contains(text(),'{option}')]]/FOOTNOTE)", + "path2": "boolean(//CHAR[substring(., string-length(.) - string-length('{option}') + 1) = '{option}']/following-sibling::FOOTNOTE/descendant::CHAR)", + "option": "생산가능인구", + "value": true, + "points": 2, + "category": "Boolean", + "item": "문구 (생산가능인구)/① 각주 설정 및 문구 입력" + }, + "26": { + "path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape", + "searchValue": "전체 인구가 늘더라도 생산가능인구가 감소한다면 생산가능인구가 짊어져야 하는 비용은 증가한다.", + "value": "굴림", + "points": 1, + "category": "FontName", + "item": "문구 (생산가능인구)/② 글씨체 (굴림)" + }, + "27": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape]/@Height", + "searchValue": "전체 인구가 늘더라도 생산가능인구가 감소한다면 생산가능인구가 짊어져야 하는 비용은 증가한다.", + "value": "900", + "points": 1, + "category": "OneAnswer", + "item": "문구 (생산가능인구)/③ 크기 (9pt)" + }, + "28": { + "path": "//P[TEXT[CHAR[contains(text(), '{searchValue}')]]]//AUTONUMFORMAT/@Type", + "searchValue": "전체 인구가 늘더라도 생산가능인구가 감소한다면 생산가능인구가 짊어져야 하는 비용은 증가한다.", + "value": "DecagonCircleHanja", + "points": 2, + "category": "OneAnswer", + "item": "문구 (전당)/④ 각주 번호모양", + "desc": { + "가,나,다": "HangulSyllable", + "1,2,3": "Digit", + "일,이,삼": "HangulPhonetic", + "갑,을,병": "DecagonCircle", + "A,B,C": "LatinCapital", + "a,b,c": "LatinSmall", + "Ⓐ,Ⓑ,Ⓒ": "CircledLatinCapital", + "①,②,③": "CircledDigit", + "一,二,三": "Ideograph", + "㉠,㉡,㉢": "CircledHangulJamo", + "ⓐ,ⓑ,ⓒ": "CircledLatinSmall", + "㊀,㊁,㊂": "CircledIdeograph", + "i,ii,iii": "RomanSmall", + "I,II,III": "RomanCapital", + "甲,乙,丙": "DecagonCircleHanja", + "+,++,+++": "UserChar", + "*,**,***": "UserChar", + "정답에 맞는 값 value에 입력": "" + } + }, + "29": { + "path": "boolean(//CHAR[contains(text(),'{ignoreWord}')])", + "ignoreWord": "Disaster", + "value": true, + "points": 3, + "category": "Boolean", + "item": "Disaster/영단어 미입력, 대소문자/오타 시 전체 감점", + "desc": "유사도 검사를 진행하지 않고 영단어가 모두 일치해야 하므로 xpath구문 내 단어도 수정필요" + }, + "30": { + "path": "//CHAR[contains(text(),'{kor}')][contains(text(),'{chn}')]", + "word": [ + ["이론", "理論"], + ["분포", "分布"], + ["확산", "擴散"], + ["변화", "變化"], + ["확대", "擴大"] + ], + "value": 10, + "points": 10, + "category": "Hanja", + "item": "① 이론(理論), ② 분포(分布), ③ 확산(擴散), ④ 변화(變化), ⑤ 확대(擴大)" + }, + "31": { + "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'지기시작')])", + "value": true, + "points": 3, + "category": "Boolean", + "item": "문구 (…기점으로 시작하는 약해지기 현상을…)>'시작하는' / '약해지기' 순서바꿈" + }, + "32": { + "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'취업기회')])", + "value": true, + "points": 3, + "category": "Boolean", + "item": "문구 (…청년들의 취협 기회도…)>'협' → '업' 글자바꿈" + }, + "33": { + "path": "//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape", + "searchValue": "OECD 주요국 합계출산율", + "value": "궁서", + "points": 1, + "category": "FontName", + "item": "제목 문구 (OECD 주요국 합계출산율)/① 글씨체 (궁서)" + }, + "34": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height", + "searchValue": "OECD 주요국 합계출산율", + "value": "1200", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (OECD 주요국 합계출산율)/② 크기 (1200)" + }, + "35": { + "path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]", + "searchValue": "OECD 주요국 합계출산율", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "제목 문구 (OECD 주요국 합계출산율)/③ 진하게" + }, + "36": { + "path": "//PARASHAPE[@Id=//P[.//CHAR[text()='{searchValue}']]/@ParaShape]/@Align", + "searchValue": "OECD 주요국 합계출산율", + "value": "Center", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (OECD 주요국 합계출산율)/④ 정렬 (가운데 정렬)" + }, + "37": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor", + "value": "247,159,100", + "points": 2, + "category": "Color", + "item": "위쪽 제목 셀/① 색상(RGB:247,159,100)" + }, + "38": { + "path": "//CHARSHAPE[@Id=//TABLE/ROW[1]/descendant::TEXT/@CharShape]", + "value": "BOLD", + "points": 1, + "category": "FontAttribute", + "item": "위쪽 제목 셀/② 진하게", + "desc": "글자 속성이라 CELLZONE으로 적용 되지 않음" + }, + "39": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Type", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/BOTTOMBORDER/@Type", + "value": "DoubleSlim", + "points": 2, + "category": "TableAnswer", + "item": "제목 셀 아래선/① 이중실선" + }, + "40": { + "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Width", + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr=(ancestor::TABLE[1]/@ColCount)-1]/@BorderFill]/BOTTOMBORDER/@Width", + "value": "0.5mm", + "points": 2, + "category": "TableAnswer", + "item": "제목 셀 아래선/② 0.5mm" + }, + "41": { + "path": "//TABLE//TEXT/@CharShape", + "path2": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/FONTID/@Hangul]/@Name", + "value": "돋움체", + "points": 1, + "category": "TableFontName", + "category_tmp": "FontName", + "item": "글자모양/① 글씨체 (돋움체)", + "desc": "테이블 폰트명 문항은 테이블의 모든 셀이 정답폰트와 일치해야 함, 하나만 일치해도 정답으로 채점할 경우 category값을 FontName으로 변경" + }, + "42": { + "path": "//CHARSHAPE[@Id=//TABLE//TEXT/@CharShape]/@Height", + "value": "1000", + "points": 1, + "category": "TableAnswer", + "item": "글자모양/② 크기 (1000)" + }, + "43": { + "path": "//PARASHAPE[@Id=//TABLE/ROW//P/@ParaShape]/@Align", + "value": "Center", + "points": 1, + "category": "TableAnswer", + "item": "글자모양/③ 정렬 (가운데 정렬)" + }, + "44": { + "path": "boolean(//TABLE[1]/ROW[last()]/CELL[position()=last()]//FIELDBEGIN[starts-with(@Command, '={option}')]) or boolean(//TABLE[1]/ROW[last()]/CELL[position()=last()-1]//FIELDBEGIN[starts-with(@Command, '={option}')])", + "option": "AVG", + "value": true, + "points": 4, + "category": "Boolean", + "item": "블록 계산식/합계", + "desc": "option값에 합계는 SUM / 평균은 AVG" + }, + "45": { + "chart_xpath": "", + "chart_type": "꺾은선형", + "value": true, + "points": 2, + "category": "ChartType", + "item": "① 종류 (꺾은선형)", + "desc": "chart_type을 입력받아 차트타입에 맞는 xml요소가 있는지 내부적으로 검사, chart_type만 한글로 입력해주면 된다. (공백무시)" + }, + "46": { + "chart_xpath": "//c:valAx/c:majorTickMark/@val", + "value": "out", + "points": 2, + "category": "ChartOneAnswer", + "item": "② 값 축 주 눈금선", + "desc": "chart xml파일에서 답안을 가져오는 문항은 path키값 대신 chart_xpath키값을 이용해 xapth구문을 작성한다" + }, + "47": { + "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]//SIZE/@Width", + "value": "80", + "points": 2, + "category": "mmSize", + "item": "③ 크기-너비 (80 mm)" + }, + "48": { + "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]//SIZE/@Height", + "value": "90", + "points": 2, + "category": "mmSize", + "item": "④ 크기-높이 (90 mm)" + }, + "49": { + "chart_xpath": "boolean(//c:chart and not(//c:pt[not(ancestor::c:tx)]/c:v[text()='합계' or text()='평균']))", + "value": true, + "points": 2, + "category": "Boolean", + "item": "⑤ 차트 데이터(표에서 블록계산식을 제외한 나머지 값만 이용)", + "desc": "차트가 존재하고 블록계산식(합계, 평균) 데이터가 없는 경우 정답 처리" + }, + "50": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r//a:ea/@typeface", + "searchValue": "OECD 주요국 합계출산율", + "value": "돋움", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (OECD 주요국 합계출산율)/① 글씨체 (돋움)" + }, + "51": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@sz", + "searchValue": "OECD 주요국 합계출산율", + "value": "1300", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (OECD 주요국 합계출산율)/② 크기 (1300)" + }, + "52": { + "chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@{option}", + "option": "b", + "searchValue": "OECD 주요국 합계출산율", + "value": "1", + "points": 1, + "category": "OneAnswer", + "item": "제목 문구 (OECD 주요국 합계출산율)/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "53": { + "chart_xpath": "//c:catAx/c:txPr//a:ea/@typeface", + "value": "굴림체", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/① 글꼴 (굴림체)" + }, + "54": { + "chart_xpath": "//c:catAx/c:txPr//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/② 크기 (9pt)" + }, + "55": { + "chart_xpath": "//c:catAx/c:txPr//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "ChartOneAnswer", + "item": "X축/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "56": { + "chart_xpath": "//c:valAx/c:txPr//a:ea/@typeface", + "value": "굴림체", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/① 글꼴 (굴림체)" + }, + "57": { + "chart_xpath": "//c:valAx/c:txPr//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/② 크기 (9pt)" + }, + "58": { + "chart_xpath": "//c:valAx/c:txPr//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "ChartOneAnswer", + "item": "Y축/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + }, + "59": { + "chart_xpath": "//c:legend//a:ea/@typeface", + "value": "굴림체", + "points": 1, + "category": "OneAnswer", + "item": "범례/① 글꼴 (굴림체)" + }, + "60": { + "chart_xpath": "//c:legend//a:defRPr/@sz", + "value": "900", + "points": 1, + "category": "OneAnswer", + "item": "범례/② 크기 (9pt)" + }, + "61": { + "chart_xpath": "//c:legend//a:defRPr/@{option}", + "option": "i", + "value": "1", + "points": 1, + "category": "OneAnswer", + "item": "범례/③ 기울임", + "desc": "option값 - 기울임(Italic):i / 굵게(Bold):b" + } + } +} diff --git a/회차별채점자료/2601/DIW_2601C_문제.hwpx b/회차별채점자료/2601/DIW_2601C_문제.hwpx new file mode 100644 index 0000000..3f274c1 Binary files /dev/null and b/회차별채점자료/2601/DIW_2601C_문제.hwpx differ diff --git a/회차별채점자료/2601/DIW_2601C_채점기준표.xlsx b/회차별채점자료/2601/DIW_2601C_채점기준표.xlsx new file mode 100644 index 0000000..69ecffd Binary files /dev/null and b/회차별채점자료/2601/DIW_2601C_채점기준표.xlsx differ