2507회 채점기준표 작성 / [2-46] 문항 "차트 줄/칸전환여부" 로직추가

This commit is contained in:
2025-07-29 18:00:04 +09:00
parent b8b233e50a
commit 65c5f348e4
37 changed files with 2420 additions and 1493 deletions

4
.bashrc.local Normal file
View File

@@ -0,0 +1,4 @@
# 프로젝트 루트 폴더/.bashrc.local
if [ -f .venv/Scripts/activate ]; then
source .venv/Scripts/activate
fi

2
.gitignore vendored
View File

@@ -3,3 +3,5 @@ output/
input/
~$*.xlsx
.venv/

3
.vscode/launch.json vendored
View File

@@ -10,7 +10,8 @@
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
"console": "integratedTerminal",
"cwd": "${fileDirname}"
}
]
}

12
.vscode/settings.json vendored
View File

@@ -1,12 +0,0 @@
{
"cSpell.words": [
"BINITEM",
"charshape",
"chartxml",
"currect",
"FIELDBEGIN",
"FIELDEND",
"targ",
"TEXTART"
]
}

View File

@@ -1,6 +1,5 @@
import win32com.client as win32
import os
import time
constants = win32.constants

View File

@@ -40,8 +40,8 @@ def copy_dic_subdirs(source_root, target_root_a, target_root_b, target_root_c, t
# 사용법
# exam_round = "2504_2"
exam_round = "2506"
source_directory = r"C:\Users\dra\project\data\제2506회 정기\답안파일\2506회 디지털정보활용능력 답안파일"
exam_round = "2507"
source_directory = r"D:\project\HWP\HWP-Scoring\회차별채점자료\2507\hwp_정답"
target_directory_a = f".\\input\\{exam_round}\\A" # '1교시'의 타겟 경로
target_directory_b = f".\\input\\{exam_round}\\B" # '2교시'의 타겟 경로

View File

@@ -24,7 +24,6 @@ import os
import logging
import shutil
from pathlib import Path
from pywinauto import Application
from itertools import chain
import time
@@ -166,18 +165,18 @@ if __name__ == "__main__":
exam_rounds = [
# "2506_3",
"2506"
"2507"
]
# 변환할 폴더 경로 설정
# 배열 동시에 변환하면 에러발생 -> 하나씩 변환 -> time.sleep(0.5) 추가
for exam_round in exam_rounds:
folders = [
(f"C:\\Users\\dra\\project\\HWP\\HWP-Scoring\\input\\{exam_round}\\A\\DIW",f"C:\\Users\\dra\\project\\HWP\\HWP-Scoring\\output\\{exam_round}\\A\\DIW"),
(f"C:\\Users\\dra\\project\\HWP\\HWP-Scoring\\input\\{exam_round}\\B\\DIW",f"C:\\Users\\dra\\project\\HWP\\HWP-Scoring\\output\\{exam_round}\\B\\DIW"),
(f"C:\\Users\\dra\\project\\HWP\\HWP-Scoring\\input\\{exam_round}\\C\\DIW",f"C:\\Users\\dra\\project\\HWP\\HWP-Scoring\\output\\{exam_round}\\C\\DIW"),
(f"C:\\Users\\dra\\project\\HWP\\HWP-Scoring\\input\\{exam_round}\\D\\DIW",f"C:\\Users\\dra\\project\\HWP\\HWP-Scoring\\output\\{exam_round}\\D\\DIW"),
(f"C:\\Users\\dra\\project\\HWP\\HWP-Scoring\\input\\{exam_round}\\E\\DIW",f"C:\\Users\\dra\\project\\HWP\\HWP-Scoring\\output\\{exam_round}\\E\\DIW"),
(f"D:\\project\\HWP\\HWP-Scoring\\input\\{exam_round}\\A\\DIW",f"D:\\project\\HWP\\HWP-Scoring\\output\\{exam_round}\\A\\DIW"),
(f"D:\\project\\HWP\\HWP-Scoring\\input\\{exam_round}\\B\\DIW",f"D:\\project\\HWP\\HWP-Scoring\\output\\{exam_round}\\B\\DIW"),
(f"D:\\project\\HWP\\HWP-Scoring\\input\\{exam_round}\\C\\DIW",f"D:\\project\\HWP\\HWP-Scoring\\output\\{exam_round}\\C\\DIW"),
(f"D:\\project\\HWP\\HWP-Scoring\\input\\{exam_round}\\D\\DIW",f"D:\\project\\HWP\\HWP-Scoring\\output\\{exam_round}\\D\\DIW"),
(f"D:\\project\\HWP\\HWP-Scoring\\input\\{exam_round}\\E\\DIW",f"D:\\project\\HWP\\HWP-Scoring\\output\\{exam_round}\\E\\DIW"),
]
# folders = [

BIN
250714_DIW_2506C_TEST.xlsx Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,852 +0,0 @@
{
"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": "100",
"tolerance": 1,
"points": 2,
"category": "mmSize",
"item": "문구 (한국골프박람회)/③ 크기-너비 (110mm)"
},
"4": {
"path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Height",
"searchValue": "한국골프박람회",
"value": "20",
"tolerance": 1,
"points": 2,
"category": "mmSize",
"item": "문구 (한국골프박람회)/④ 크기-높이 (20mm)"
},
"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": "236,162,142",
"points": 2,
"category": "Color",
"item": "지/③ 면색 : 색상(RGB:236,162,142)"
},
"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": 2,
"category": "FontAttribute",
"item": "문구 (그 시작부터 지금까지 줄곧 한국골프산업의 성장과 함께해 온)/① ITALIC"
},
"13": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]",
"searchValue": "그 시작부터 지금까지 줄곧 한국골프산업의 성장과 함께해 온",
"value": "UNDERLINE",
"points": 2,
"category": "FontAttribute",
"item": "문구 (그 시작부터 지금까지 줄곧 한국골프산업의 성장과 함께해 온)/② UNDERLINE"
},
"14": {
"path": "//CHAR[contains(text(),'{char1}')]",
"path2": "//CHAR[contains(text(),'{char2}')]",
"path3": "//CHAR[contains(text(),'{char3}')]",
"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(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
"searchValue": "행사안내",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (▷ 행사안내 ◁)/② 정렬 (가운데 정렬)"
},
"17": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]",
"searchValue": "스크린 골프 체험 및 장타대회, 프로골퍼 원포인트 레슨",
"value": "BOLD",
"points": 1,
"category": "FontAttribute",
"item": "문구 (스크린 골프 체험 및 장타대회, 프로골퍼 원포인트 레슨)/① BOLD"
},
"18": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]",
"searchValue": "스크린 골프 체험 및 장타대회, 프로골퍼 원포인트 레슨",
"value": "UNDERLINE",
"points": 1,
"category": "FontAttribute",
"item": "문구 (스크린 골프 체험 및 장타대회, 프로골퍼 원포인트 레슨)/② UNDERLINE"
},
"19": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN",
"searchValue": "기타사항",
"value": {
"Left": 10,
"Indent": 12
},
"points": 2,
"category": "ParaShape",
"item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (10pt), 내어쓰기 (12pt)",
"desc": "내부적으로 내어쓰기는 음수값 / JSON value값은 양수로 입력"
},
"20": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
"searchValue": "2025. 06. 30.",
"value": "1400",
"points": 1,
"category": "OneAnswer",
"item": "문구 (2025. 06. 30.)/① 크기 (14pt)",
"desc": "1pt당 100"
},
"21": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
"searchValue": "2025. 06. 30.",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (2025. 06. 30.)/② 정렬 (가운데 정렬)"
},
"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": "2400",
"points": 1,
"category": "OneAnswer",
"item": "문구 (한국골프연맹)/② 크기 (2400)"
},
"24": {
"path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/ancestor::P/@ParaShape]/@Align",
"searchValue": "한국골프연맹",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (한국골프연맹)/③ 정렬 (가운데 정렬)"
},
"25": {
"path": "//SECTION[1]//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "DIAT",
"value": "돋움",
"points": 1,
"category": "FontName",
"item": "문구 (DIAT)/① 글꼴 (돋움)"
},
"26": {
"path": "//CHARSHAPE[@Id=//SECTION[1]//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "DIAT",
"value": "900",
"points": 1,
"category": "OneAnswer",
"item": "문구 (DIAT)/② 크기 (9pt)"
},
"27": {
"path": "//PARASHAPE[@Id=//SECTION[1]//CHAR[text()='{searchValue}']/parent::TEXT/parent::P/@ParaShape]/@Align",
"searchValue": "DIAT",
"value": "Right",
"points": 1,
"category": "OneAnswer",
"item": "문구 (DIAT)/③ 정렬 (오른쪽 정렬)"
},
"28": {
"path": "//PAGENUM/@FormatType",
"value": "RomanCapital",
"points": 2,
"category": "PageNumber",
"item": "① 쪽 번호 매기기 (A,B,C 순으로)",
"desc1": {
"가,나,다": "HangulSyllable",
"1,2,3": "Digit",
"갑,을,병": "DecagonCircle",
"A,B,C": "LatinCapital",
"a,b,c": "LatinSmall",
"①,②,③": "CircledDigit",
"一,二,三": "Ideograph",
"㉠,㉡,㉢": "CircledHangulJamo",
"ⓐ,ⓑ,ⓒ": "CircledLatinSmall",
"i,ii,iii": "RomanSmall",
"I,II,III": "RomanCapital",
"정답에 맞는 값 value에 입력": ""
},
"desc2": "1, 2페이지 모두 정답이어야 점수 부여"
},
"29": {
"path": "//PAGENUM/@Pos",
"value": "BottomCenter",
"points": 2,
"category": "PageNumber",
"item": "오른쪽 아래",
"desc": "1, 2페이지 모두 정답이어야 점수 부여",
"desc2": {
"가운데 아래": "BottomCenter",
"오른쪽 아래": "BottomRight"
}
},
"30": {
"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//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Width",
"searchValue": "골프",
"value": "50",
"points": 2,
"category": "mmSize",
"item": "문구 (골프)/① 크기-너비 (50 mm)"
},
"5": {
"path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Height",
"searchValue": "골프",
"value": "12",
"points": 2,
"category": "mmSize",
"item": "문구 (골프)/② 크기-높이 (12 mm)"
},
"6": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//LINESHAPE",
"searchValue": "골프",
"value": {
"Style": "DoubleSlim",
"Width": "283"
},
"points": 2,
"category": "LineShape",
"item": "문구 (골프)/③ 테두리 : 이중 실선(1.00mm)",
"desc": "1mm = 283pt value['Width']에 pt값 입력"
},
"7": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/@Ratio",
"searchValue": "골프",
"value": "20",
"points": 2,
"category": "OneAnswer",
"item": "문구 (골프)/④ 글상자 모서리 (둥근모양)",
"desc": "모서리 비율 50이면 반원 / 20이면 둥근모양"
},
"8": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor",
"searchValue": "골프",
"value": "147,194,80",
"points": 2,
"category": "Color",
"item": "문구 (골프)/⑤ 채우기 : 색상(RGB:147,194,80)"
},
"9": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/POSITION/@TreatAsChar",
"searchValue": "골프",
"value": "true",
"points": 1,
"category": "OneAnswer",
"item": "문구 (골프)/⑥ 글상자 위치 (글자처럼 취급)"
},
"10": {
"path": "//PARASHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::P[last()]/@ParaShape]/@Align",
"searchValue": "골프",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (골프)/⑦ 글상자 정렬 (가운데 정렬)"
},
"11": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "골프",
"value": "견고딕",
"points": 1,
"category": "FontName",
"item": "문구 (골프)/⑧ 글씨체 (견고딕)"
},
"12": {
"path": "//CHARSHAPE[@Id=//RECTANGLE//TEXT[./CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "골프",
"value": "2200",
"points": 1,
"category": "OneAnswer",
"item": "문구 (골프)/⑨ 글씨크기 (2200)",
"desc": "1pt당 100"
},
"13": {
"path": "//PARASHAPE[@Id=//RECTANGLE//P[.//CHAR[text()='{searchValue}']]/@ParaShape]/@Align",
"searchValue": "골프",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (골프)/⑩ 정렬 (가운데 정렬)"
},
"14": {
"path": "//BINITEM[@BinData=//PICTURE/IMAGE/@BinItem][@Format='JPG']",
"value": true,
"points": 2,
"category": "Boolean",
"item": "① 파일명 \"그림A.jpg\" 삽입"
},
"15": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/SIZE/@Width",
"value": "85",
"points": 2,
"category": "mmSize",
"item": "② 크기-너비 (85 mm)"
},
"16": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/SIZE/@Height",
"value": "40",
"points": 2,
"category": "mmSize",
"item": "③ 크기-높이 (40 mm)"
},
"17": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@HorzOffset",
"value": "0",
"points": 2,
"category": "mmSize",
"item": "④ 위치 (어울림 : 가로-쪽의 왼쪽 0.0mm)"
},
"18": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@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. 골프란?)/② 크기 (12pt)"
},
"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. 한국의 골프 역사)/② 크기 (12pt)"
},
"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": "LatinSmall",
"points": 2,
"category": "OneAnswer",
"item": "문구 (전당)/④ 각주 번호모양",
"desc": {
"가,나,다": "HangulSyllable",
"1,2,3": "Digit",
"갑,을,병": "DecagonCircle",
"A,B,C": "LatinCapital",
"a,b,c": "LatinSmall",
"①,②,③": "CircledDigit",
"一,二,三": "Ideograph",
"㉠,㉡,㉢": "CircledHangulJamo",
"ⓐ,ⓑ,ⓒ": "CircledLatinSmall",
"i,ii,iii": "RomanSmall",
"I,II,III": "RomanCapital",
"정답에 맞는 값 value에 입력": ""
}
},
"29": {
"path": "boolean(//CHAR[contains(text(),'Fairway')])",
"ignoreWord": "Fairway",
"value": true,
"points": 3,
"category": "Boolean",
"item": "Fairway/영단어 미입력, 대소문자/오타 시 전체 감점",
"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": "1200",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (골프 관련 체육시설업 현황)/② 크기 (12pt)"
},
"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,61",
"points": 2,
"category": "Color",
"item": "위쪽 제목 셀/① 색상(RGB:233,174,61)"
},
"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": "글자모양/② 크기 (10pt)"
},
"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": "OneAnswer",
"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": "1200",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (골프 관련 체육시설업 현황)/② 크기 (1200)"
},
"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"
}
}
}

839
DIW_2507A.json Normal file
View File

@@ -0,0 +1,839 @@
{
"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": 2,
"category": "FontAttribute",
"item": "문구 (평생교육사 양성 교육과정 현황과 개선 방안 탐색)/① BOLD"
},
"13": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]",
"searchValue": "평생교육사 양성 교육과정 현황과 개선 방안 탐색",
"value": "UNDERLINE",
"points": 2,
"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": "문구 (※ 기타… 이하 문단)/왼쪽여백 (10pt), 내어쓰기 (12pt)",
"desc": "내부적으로 내어쓰기는 음수값 / JSON value값은 양수로 입력"
},
"20": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
"searchValue": "2025. 07. 26.",
"value": "1300",
"points": 1,
"category": "OneAnswer",
"item": "문구 (2025. 07. 26.)/① 크기 (1300)",
"desc": "1pt당 100"
},
"21": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
"searchValue": "2025. 07. 26.",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (2025. 07. 26.)/② 정렬 (가운데 정렬)"
},
"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": "//SECTION[1]//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "DIAT",
"value": "굴림체",
"points": 1,
"category": "FontName",
"item": "문구 (DIAT)/① 글꼴 (굴림체)"
},
"26": {
"path": "//CHARSHAPE[@Id=//SECTION[1]//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "DIAT",
"value": "900",
"points": 1,
"category": "OneAnswer",
"item": "문구 (DIAT)/② 크기 (9pt)"
},
"27": {
"path": "//PARASHAPE[@Id=//SECTION[1]//CHAR[text()='{searchValue}']/parent::TEXT/parent::P/@ParaShape]/@Align",
"searchValue": "DIAT",
"value": "Right",
"points": 1,
"category": "OneAnswer",
"item": "문구 (DIAT)/③ 정렬 (오른쪽 정렬)"
},
"28": {
"path": "//PAGENUM/@FormatType",
"value": "LatinCapital",
"points": 2,
"category": "PageNumber",
"item": "① 쪽 번호 매기기 (가,나,다 순으로)",
"desc1": {
"가,나,다": "HangulSyllable",
"1,2,3": "Digit",
"갑,을,병": "DecagonCircle",
"A,B,C": "LatinCapital",
"a,b,c": "LatinSmall",
"①,②,③": "CircledDigit",
"一,二,三": "Ideograph",
"㉠,㉡,㉢": "CircledHangulJamo",
"ⓐ,ⓑ,ⓒ": "CircledLatinSmall",
"i,ii,iii": "RomanSmall",
"I,II,III": "RomanCapital",
"desc": "정답에 맞는 값 value에 입력"
},
"desc2": "1, 2페이지 모두 정답이어야 점수 부여"
},
"29": {
"path": "//PAGENUM/@Pos",
"value": "BottomRight",
"points": 2,
"category": "PageNumber",
"item": "오른쪽 아래",
"desc": "1, 2페이지 모두 정답이어야 점수 부여",
"desc2": {
"가운데 아래": "BottomCenter",
"오른쪽 아래": "BottomRight"
}
},
"30": {
"path": "//PARASHAPE[@Id='{parashape_id}']/PARAMARGIN/@LineSpacing",
"value": "200",
"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//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Width",
"searchValue": "평생교육시대",
"value": "65",
"points": 2,
"category": "mmSize",
"item": "문구 (평생교육시대)/① 크기-너비 (65 mm)"
},
"5": {
"path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Height",
"searchValue": "평생교육시대",
"value": "12",
"points": 2,
"category": "mmSize",
"item": "문구 (평생교육시대)/② 크기-높이 (12 mm)"
},
"6": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//LINESHAPE",
"searchValue": "평생교육시대",
"value": {
"Style": "DoubleSlim",
"Width": "283"
},
"points": 2,
"category": "LineShape",
"item": "문구 (평생교육시대)/③ 테두리 : 이중 실선(1.00mm)",
"desc": "1mm = 283pt value['Width']에 pt값 입력"
},
"7": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/@Ratio",
"searchValue": "평생교육시대",
"value": "20",
"points": 2,
"category": "OneAnswer",
"item": "문구 (평생교육시대)/④ 글상자 모서리 (반원)",
"desc": "모서리 비율 반원:50 / 둥근모양:20"
},
"8": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor",
"searchValue": "평생교육시대",
"value": "224,122,146",
"points": 2,
"category": "Color",
"item": "문구 (평생교육시대)/⑤ 채우기 : 색상(RGB:224,122,146)"
},
"9": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/POSITION/@TreatAsChar",
"searchValue": "평생교육시대",
"value": "true",
"points": 1,
"category": "OneAnswer",
"item": "문구 (평생교육시대)/⑥ 글상자 위치 (글자처럼 취급)"
},
"10": {
"path": "//PARASHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::P[last()]/@ParaShape]/@Align",
"searchValue": "평생교육시대",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (평생교육시대)/⑦ 글상자 정렬 (가운데 정렬)"
},
"11": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "평생교육시대",
"value": "휴먼옛체",
"points": 1,
"category": "FontName",
"item": "문구 (평생교육시대)/⑧ 글씨체 (휴먼옛체)"
},
"12": {
"path": "//CHARSHAPE[@Id=//RECTANGLE//TEXT[./CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "평생교육시대",
"value": "2000",
"points": 1,
"category": "OneAnswer",
"item": "문구 (평생교육시대)/⑨ 글씨크기 (2000)",
"desc": "1pt당 100"
},
"13": {
"path": "//PARASHAPE[@Id=//RECTANGLE//P[.//CHAR[text()='{searchValue}']]/@ParaShape]/@Align",
"searchValue": "평생교육시대",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (평생교육시대)/⑩ 정렬 (가운데 정렬)"
},
"14": {
"path": "//BINITEM[@BinData=//PICTURE/IMAGE/@BinItem][@Format='JPG']",
"value": true,
"points": 2,
"category": "Boolean",
"item": "① 파일명 \"그림A.jpg\" 삽입",
"desc": "첨부 이미지 파일명 손상으로 정상적인 채점이 불가한 경우가 발견되어서 이미지 첨부 여부로 채점 방식 변경 (7/3)"
},
"15": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/SIZE/@Width",
"value": "80",
"points": 2,
"category": "mmSize",
"item": "② 크기-너비 (80 mm)"
},
"16": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/SIZE/@Height",
"value": "40",
"points": 2,
"category": "mmSize",
"item": "③ 크기-높이 (40 mm)"
},
"17": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@HorzOffset",
"value": "0",
"points": 2,
"category": "mmSize",
"item": "④ 위치 (어울림 : 가로-쪽의 왼쪽 0.0mm)"
},
"18": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@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. 평생교육이란?)/② 크기 (12pt)"
},
"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",
"갑,을,병": "DecagonCircle",
"A,B,C": "LatinCapital",
"a,b,c": "LatinSmall",
"①,②,③": "CircledDigit",
"一,二,三": "Ideograph",
"㉠,㉡,㉢": "CircledHangulJamo",
"ⓐ,ⓑ,ⓒ": "CircledLatinSmall",
"i,ii,iii": "RomanSmall",
"I,II,III": "RomanCapital",
"+,++,+++": "UserChar",
"정답에 맞는 값 value에 입력": ""
}
},
"29": {
"path": "boolean(//CHAR[contains(text(),'Development')])",
"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"
}
}
}

View File

@@ -46,65 +46,65 @@
"1": {
"1": {
"path": "//TEXTART[@Text='{searchValue}']/TEXTARTSHAPE/@FontName",
"searchValue": "동물등록제시행안내",
"value": "맑은고딕",
"searchValue": "슬기로운미디어생활특강안내",
"value": "휴먼옛체",
"points": 1,
"category": "OneAnswer",
"item": "문구 (동물등록제시행안내)/① 글씨체 (맑은고딕)"
"item": "문구 (슬기로운미디어생활특강안내)/① 글씨체 (휴먼옛체)"
},
"2": {
"path": "//TEXTART[@Text='{searchValue}']/descendant::WINDOWBRUSH/@FaceColor",
"searchValue": "동물등록제시행안내",
"value": "233,174,43",
"searchValue": "슬기로운미디어생활특강안내",
"value": "53,149,164",
"points": 2,
"category": "Color",
"item": "문구 (동물등록제시행안내)/② 채우기 : 색상(RGB:233,174,43)"
"item": "문구 (슬기로운미디어생활특강안내)/② 채우기 : 색상(RGB:53,149,164)"
},
"3": {
"path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Width",
"searchValue": "동물등록제시행안내",
"searchValue": "슬기로운미디어생활특강안내",
"value": "110",
"tolerance": 1,
"points": 2,
"category": "mmSize",
"item": "문구 (동물등록제시행안내)/③ 크기-너비 (110mm)"
"item": "문구 (슬기로운미디어생활특강안내)/③ 크기-너비 (110mm)"
},
"4": {
"path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Height",
"searchValue": "동물등록제시행안내",
"searchValue": "슬기로운미디어생활특강안내",
"value": "20",
"tolerance": 1,
"points": 2,
"category": "mmSize",
"item": "문구 (동물등록제시행안내)/④ 크기-높이 (20 mm)"
"item": "문구 (슬기로운미디어생활특강안내)/④ 크기-높이 (20 mm)"
},
"5": {
"path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/POSITION/@TreatAsChar",
"searchValue": "동물등록제시행안내",
"searchValue": "슬기로운미디어생활특강안내",
"value": "true",
"points": 2,
"category": "OneAnswer",
"item": "문구 (동물등록제시행안내)/⑤ 위치 (글자처럼 취급)"
"item": "문구 (슬기로운미디어생활특강안내)/⑤ 위치 (글자처럼 취급)"
},
"6": {
"path": "//PARASHAPE[@Id=//P[.//TEXTART[@Text='{searchValue}']]/@ParaShape]/@Align",
"searchValue": "동물등록제시행안내",
"searchValue": "슬기로운미디어생활특강안내",
"value": "Center",
"points": 2,
"category": "OneAnswer",
"item": "문구 (동물등록제시행안내)/⑥ 정렬 (가운데 정렬)"
"item": "문구 (슬기로운미디어생활특강안내)/⑥ 정렬 (가운데 정렬)"
},
"7": {
"path": "//TEXTART[@Text='{searchValue}']",
"searchValue": "동물등록제시행안내",
"searchValue": "슬기로운미디어생활특강안내",
"value": true,
"points": 2,
"category": "Boolean",
"item": "문구 (동물등록제시행안내)/⑦ 글맵시모양 (육안확인)"
"item": "문구 (슬기로운미디어생활특강안내)/⑦ 글맵시모양 (육안확인)"
},
"8": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/SIZE",
"searchValue": "",
"searchValue": "",
"value": {
"Height": 2800,
"Width": 2800
@@ -112,94 +112,94 @@
"tolerance": 200,
"points": 1,
"category": "TwoLineSize",
"item": "/① 모양 (2줄)"
"item": "/① 모양 (2줄)"
},
"9": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "",
"value": "돋움체",
"searchValue": "",
"value": "맑은고딕",
"points": 1,
"category": "FontName",
"item": "/② 글씨체 (돋움체)"
"item": "/② 글씨체 (맑은고딕)"
},
"10": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor",
"searchValue": "",
"value": "144,210,66",
"searchValue": "",
"value": "172,235,62",
"points": 2,
"category": "Color",
"item": "/③ 면색 : 색상(RGB:144,210,66)"
"item": "/③ 면색 : 색상(RGB:172,235,62)"
},
"11": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//OUTSIDEMARGIN/@Right",
"searchValue": "",
"searchValue": "",
"value": "3.0",
"tolerance": 1,
"points": 2,
"category": "mmSize",
"item": "/④ 본문과의 간격 : 3.0mm"
"item": "/④ 본문과의 간격 : 3.0mm"
},
"12": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]",
"searchValue": "동물병원이나 펫샵, 동물등록대행업체에서",
"value": "BOLD",
"searchValue": "동영상 콘텐츠의 현재와 미래",
"value": "ITALIC",
"points": 2,
"category": "FontAttribute",
"item": "문구 (동물병원이나 펫샵, 동물등록대행업체에서)/① BOLD"
"item": "문구 (동영상 콘텐츠의 현재와 미래)/① ITALIC"
},
"13": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]",
"searchValue": "동물병원이나 펫샵, 동물등록대행업체에서",
"searchValue": "동영상 콘텐츠의 현재와 미래",
"value": "UNDERLINE",
"points": 2,
"category": "FontAttribute",
"item": "문구 (동물병원이나 펫샵, 동물등록대행업체에서)/② UNDERLINE"
"item": "문구 (동영상 콘텐츠의 현재와 미래)/② UNDERLINE"
},
"14": {
"path": "//CHAR[contains(string(.),'{char1}')]/text()",
"path2": "//CHAR[contains(string(.),'{char2}')]/text()",
"path3": "//CHAR[contains(string(.),'{char3}')]/text()",
"char1": "",
"char2": "",
"char1": "",
"char2": "",
"char3": "※",
"value": 3,
"points": 3,
"category": "SpecialChar",
"item": "① , ② , ③ ※"
"item": "① , ② , ③ ※"
},
"15": {
"path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape",
"searchValue": "사안내",
"value": "돋움",
"searchValue": "사안내",
"value": "궁서",
"points": 1,
"category": "FontName",
"item": "문구 (★ 사업안내 )/① 글씨체 (돋움)"
"item": "문구 (◎ 행사안내 )/① 글씨체 (궁서)"
},
"16": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{match_str}')]/ancestor::P/@ParaShape]/@Align",
"match_str": "사안내",
"match_str": "사안내",
"value": "Center",
"points": 1,
"category": "Align",
"item": "문구 (★ 사업안내 )/② 정렬 (가운데 정렬)"
"item": "문구 (◎ 행사안내 )/② 정렬 (가운데 정렬)"
},
"17": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]",
"searchValue": "1마리당 3만원, 세대당 최대 1회 지원",
"searchValue": "중랑미디어센터 홈페이지(http://www.ihd.or.kr) 슬기로운 미디어 생활",
"value": "BOLD",
"points": 1,
"category": "FontAttribute",
"item": "문구 (1마리당 3만원, 세대당 최대 1회 지원)/① BOLD"
"item": "문구 (중랑미디어센터 홈페이지(http://www.ihd.or.kr) 슬기로운 미디어 생활)/① BOLD"
},
"18": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]",
"searchValue": "1마리당 3만원, 세대당 최대 1회 지원",
"searchValue": "중랑미디어센터 홈페이지(http://www.ihd.or.kr) 슬기로운 미디어 생활",
"value": "ITALIC",
"points": 1,
"category": "FontAttribute",
"item": "문구 (1마리당 3만원, 세대당 최대 1회 지원)/② ITALIC"
"item": "문구 (중랑미디어센터 홈페이지(http://www.ihd.or.kr) 슬기로운 미디어 생활)/② ITALIC"
},
"19": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN",
@@ -210,57 +210,57 @@
},
"points": 2,
"category": "ParaShape",
"item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (10pt), 내어쓰기 (12pt)",
"item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (15pt), 내어쓰기 (12pt)",
"desc": "내부적으로 내어쓰기는 음수값 / JSON value값은 양수로 입력"
},
"20": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
"searchValue": "2025. 06. 28.",
"searchValue": "2025. 07. 26.",
"value": "1300",
"points": 1,
"category": "OneAnswer",
"item": "문구 (2025. 06. 28.)/① 크기 (1300)",
"item": "문구 (2025. 07. 26.)/① 크기 (1300)",
"desc": "1pt당 100"
},
"21": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
"searchValue": "2025. 06. 28.",
"searchValue": "2025. 07. 26.",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (2025. 06. 28.)/② 정렬 (가운데 정렬)"
"item": "문구 (2025. 07. 26.)/② 정렬 (가운데 정렬)"
},
"22": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "세종시반려동물과",
"value": "궁서",
"searchValue": "중랑미디어센터",
"value": "굴림",
"points": 1,
"category": "FontName",
"item": "문구 (세종시반려동물과)/① 글씨체 (궁서)"
"item": "문구 (중랑미디어센터)/① 글씨체 (굴림)"
},
"23": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "세종시반려동물과",
"value": "2400",
"searchValue": "중랑미디어센터",
"value": "2300",
"points": 1,
"category": "OneAnswer",
"item": "문구 (세종시반려동물과)/② 크기 (2400)"
"item": "문구 (중랑미디어센터)/② 크기 (2300)"
},
"24": {
"path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/ancestor::P/@ParaShape]/@Align",
"searchValue": "세종시반려동물과",
"searchValue": "중랑미디어센터",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (세종시반려동물과)/③ 정렬 (가운데 정렬)"
"item": "문구 (중랑미디어센터)/③ 정렬 (가운데 정렬)"
},
"25": {
"path": "//SECTION[1]//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "DIAT",
"value": "굴림",
"value": "중고딕",
"points": 1,
"category": "FontName",
"item": "문구 (DIAT)/① 글꼴 (굴림)"
"item": "문구 (DIAT)/① 글꼴 (중고딕)"
},
"26": {
"path": "//CHARSHAPE[@Id=//SECTION[1]//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
@@ -280,7 +280,7 @@
},
"28": {
"path": "//PAGENUM/@FormatType",
"value": "HangulSyllable",
"value": "RomanCapital",
"points": 2,
"category": "PageNumber",
"item": "① 쪽 번호 매기기 (가,나,다 순으로)",
@@ -296,29 +296,32 @@
"ⓐ,ⓑ,ⓒ": "CircledLatinSmall",
"i,ii,iii": "RomanSmall",
"I,II,III": "RomanCapital",
"甲,乙,丙": "DecagonCircleHanja",
"+,++,+++": "UserChar",
"desc": "정답에 맞는 값 value에 입력"
},
"desc2": "1, 2페이지 모두 정답이어야 점수 부여"
},
"29": {
"path": "//PAGENUM/@Pos",
"value": "BottomCenter",
"value": "BottomLeft",
"points": 2,
"category": "PageNumber",
"item": "가운데 아래",
"desc": "1, 2페이지 모두 정답이어야 점수 부여",
"desc2": {
"왼쪽 아래": "BottomLeft",
"가운데 아래": "BottomCenter",
"오른쪽 아래": "BottomRight"
}
},
"30": {
"path": "//PARASHAPE[@Id='{parashape_id}']/PARAMARGIN/@LineSpacing",
"value": "200",
"first_word": "",
"value": "190",
"first_word": "",
"points": 2,
"category": "LineSpacing",
"item": "문제 1 줄간격 200% 설정",
"item": "문제 1 줄간격 190% 설정",
"desc": "1페이지 문단의 줄간격이 정답이 아닌 문단이 있으면 False(감점), first_word 속성에 [문단 첫글자 장식]에 해당하는 글자를 입력해준다."
}
},
@@ -351,89 +354,89 @@
},
"4": {
"path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Width",
"searchValue": "동물등록제",
"searchValue": "방송 콘텐츠",
"value": "60",
"points": 2,
"category": "mmSize",
"item": "문구 (동물등록제)/① 크기-너비 (60 mm)"
"item": "문구 (방송 콘텐츠)/① 크기-너비 (60 mm)"
},
"5": {
"path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Height",
"searchValue": "동물등록제",
"searchValue": "방송 콘텐츠",
"value": "12",
"points": 2,
"category": "mmSize",
"item": "문구 (동물등록제)/② 크기-높이 (12 mm)"
"item": "문구 (방송 콘텐츠)/② 크기-높이 (12 mm)"
},
"6": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//LINESHAPE",
"searchValue": "동물등록제",
"searchValue": "방송 콘텐츠",
"value": {
"Style": "DoubleSlim",
"Width": "283"
},
"points": 2,
"category": "LineShape",
"item": "문구 (동물등록제)/③ 테두리 : 이중 실선(1.00mm)",
"item": "문구 (방송 콘텐츠)/③ 테두리 : 이중 실선(1.00mm)",
"desc": "1mm = 283pt value['Width']에 pt값 입력"
},
"7": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/@Ratio",
"searchValue": "동물등록제",
"searchValue": "방송 콘텐츠",
"value": "20",
"points": 2,
"category": "OneAnswer",
"item": "문구 (동물등록제)/④ 글상자 모서리 (반원)",
"item": "문구 (방송 콘텐츠)/④ 글상자 모서리 (반원)",
"desc": "모서리 비율 반원:50 / 둥근모양:20"
},
"8": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor",
"searchValue": "동물등록제",
"value": "244,86,167",
"searchValue": "방송 콘텐츠",
"value": "227,220,193",
"points": 2,
"category": "Color",
"item": "문구 (동물등록제)/⑤ 채우기 : 색상(RGB:244,86,167)"
"item": "문구 (방송 콘텐츠)/⑤ 채우기 : 색상(RGB:227,220,193)"
},
"9": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/POSITION/@TreatAsChar",
"searchValue": "동물등록제",
"searchValue": "방송 콘텐츠",
"value": "true",
"points": 1,
"category": "OneAnswer",
"item": "문구 (동물등록제)/⑥ 글상자 위치 (글자처럼 취급)"
"item": "문구 (방송 콘텐츠)/⑥ 글상자 위치 (글자처럼 취급)"
},
"10": {
"path": "//PARASHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::P[last()]/@ParaShape]/@Align",
"searchValue": "동물등록제",
"searchValue": "방송 콘텐츠",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (동물등록제)/⑦ 글상자 정렬 (가운데 정렬)"
"item": "문구 (방송 콘텐츠)/⑦ 글상자 정렬 (가운데 정렬)"
},
"11": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "동물등록제",
"value": "휴먼옛체",
"searchValue": "방송 콘텐츠",
"value": "견고딕",
"points": 1,
"category": "FontName",
"item": "문구 (동물등록제)/⑧ 글씨체 (휴먼옛체)"
"item": "문구 (방송 콘텐츠)/⑧ 글씨체 (견고딕)"
},
"12": {
"path": "//CHARSHAPE[@Id=//RECTANGLE//TEXT[./CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "동물등록제",
"searchValue": "방송 콘텐츠",
"value": "2000",
"points": 1,
"category": "OneAnswer",
"item": "문구 (동물등록제)/⑨ 글씨크기 (2000)",
"item": "문구 (방송 콘텐츠)/⑨ 글씨크기 (2000)",
"desc": "1pt당 100"
},
"13": {
"path": "//PARASHAPE[@Id=//RECTANGLE//P[.//CHAR[text()='{searchValue}']]/@ParaShape]/@Align",
"searchValue": "동물등록제",
"searchValue": "방송 콘텐츠",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (동물등록제)/⑩ 정렬 (가운데 정렬)"
"item": "문구 (방송 콘텐츠)/⑩ 정렬 (가운데 정렬)"
},
"14": {
"path": "//BINITEM[@BinData=//PICTURE/IMAGE/@BinItem][@Format='JPG']",
@@ -466,88 +469,88 @@
},
"18": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@VertOffset",
"value": "22",
"value": "24",
"points": 2,
"category": "mmSize",
"item": "⑤ 위치 (어울림 : 세로-쪽의 위 22 mm)"
"item": "⑤ 위치 (어울림 : 세로-쪽의 위 24 mm)"
},
"19": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "1. 제도의 필요성",
"value": "중고딕",
"searchValue": "1. 최근 콘텐츠 동향",
"value": "돋움",
"points": 1,
"category": "FontName",
"item": "문구① (1. 제도의 필요성)/① 글씨체 (중고딕)"
"item": "문구① (1. 최근 콘텐츠 동향)/① 글씨체 (돋움)"
},
"20": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "1. 제도의 필요성",
"searchValue": "1. 최근 콘텐츠 동향",
"value": "1200",
"points": 1,
"category": "OneAnswer",
"item": "문구① (1. 제도의 필요성)/② 크기 (12pt)"
"item": "문구① (1. 최근 콘텐츠 동향)/② 크기 (12pt)"
},
"21": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"searchValue": "1. 제도의 필요성",
"searchValue": "1. 최근 콘텐츠 동향",
"value": "BOLD",
"points": 1,
"category": "FontAttribute",
"item": "문구① (1. 제도의 필요성)/③ 진하게"
"item": "문구① (1. 최근 콘텐츠 동향)/③ 진하게"
},
"22": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "2. 동물등록현황",
"value": "중고딕",
"searchValue": "2. OTT 서비스의 미래",
"value": "돋움",
"points": 1,
"category": "FontName",
"item": "문구② (2. 동물등록현황)/① 글씨체 (중고딕)"
"item": "문구② (2. OTT 서비스의 미래)/① 글씨체 (돋움)"
},
"23": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "2. 동물등록현황",
"searchValue": "2. OTT 서비스의 미래",
"value": "1200",
"points": 1,
"category": "OneAnswer",
"item": "문구② (2. 동물등록현황)/② 크기 (1200)"
"item": "문구② (2. OTT 서비스의 미래)/② 크기 (1200)"
},
"24": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"searchValue": "2. 동물등록현황",
"searchValue": "2. OTT 서비스의 미래",
"value": "BOLD",
"points": 1,
"category": "FontAttribute",
"item": "문구② (2. 동물등록현황)/③ 진하게"
"item": "문구② (2. OTT 서비스의 미래)/③ 진하게"
},
"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": "유기동물",
"option": "코로나",
"value": true,
"points": 2,
"category": "Boolean",
"item": "문구 (유기동물)/① 각주 설정 및 문구 입력"
"item": "문구 (코로나)/① 각주 설정 및 문구 입력"
},
"26": {
"path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape",
"searchValue": "사람과 함께 집에서 더불어 살아가는 동물",
"value": "궁서",
"searchValue": "새로운 유형의 변종 코로나바이러스에 의해 발병한 급성 호흡기 전염병",
"value": "중고딕",
"points": 1,
"category": "FontName",
"item": "문구 (유기동물)/② 글씨체 (궁서)"
"item": "문구 (코로나)/② 글씨체 (중고딕)"
},
"27": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape]/@Height",
"searchValue": "사람과 함께 집에서 더불어 살아가는 동물",
"searchValue": "새로운 유형의 변종 코로나바이러스에 의해 발병한 급성 호흡기 전염병",
"value": "900",
"points": 1,
"category": "OneAnswer",
"item": "문구 (유기동물)/③ 크기 (9pt)"
"item": "문구 (코로나)/③ 크기 (9pt)"
},
"28": {
"path": "//P[TEXT[CHAR[contains(text(), '{searchValue}')]]]//AUTONUMFORMAT/@Type",
"searchValue": "사람과 함께 집에서 더불어 살아가는 동물",
"value": "DecagonCircleHanja",
"searchValue": "새로운 유형의 변종 코로나바이러스에 의해 발병한 급성 호흡기 전염병",
"value": "DecagonCircle",
"points": 2,
"category": "OneAnswer",
"item": "문구 (전당)/④ 각주 번호모양",
@@ -564,85 +567,86 @@
"i,ii,iii": "RomanSmall",
"I,II,III": "RomanCapital",
"甲,乙,丙": "DecagonCircleHanja",
"+,++,+++": "UserChar",
"정답에 맞는 값 value에 입력": ""
}
},
"29": {
"path": "boolean(//CHAR[contains(text(),'Petshop')])",
"ignoreWord": "Petshop",
"path": "boolean(//CHAR[contains(text(),'Streaming')])",
"ignoreWord": "Streaming",
"value": true,
"points": 3,
"category": "Boolean",
"item": "Petshop/영단어 미입력, 대소문자/오타 시 전체 감점",
"item": "Streaming/영단어 미입력, 대소문자/오타 시 전체 감점",
"desc": "유사도 검사를 진행하지 않고 영단어가 모두 일치해야 하므로 xpath구문 내 단어도 수정필요"
},
"30": {
"path": "//CHAR[contains(text(),'{kor}')][contains(text(),'{chn}')]",
"word": [
["방지", "防止"],
["제도", "制度"],
["정보", "情報"],
["부여", "附與"],
["복지", "福祉"]
["시청", "視聽"],
["송출", "送出"],
["취향", "趣向"],
["성장", "成長"],
["근절", "根絶"]
],
"value": 10,
"points": 10,
"category": "Hanja",
"item": "① 방지(防止), ② 제도(制度), ③ 정보(情報), ④ 부여(附與), ⑤ 복지(福祉)"
"item": "① 시청(視聽), ② 송출(送出), ③ 취향(趣向), ④ 성장(成長), ⑤ 근절(根絶)"
},
"31": {
"path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'생후2개')])",
"path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'간에원하')])",
"value": true,
"points": 3,
"category": "Boolean",
"item": "문구 (…생후 1개월 이상의 반려견을…)>'1' → '2' 글자바꿈"
"item": "문구 (…언제든지 원하는 원하는 시간에 순서로…) > '원하는' / '시간에' 순서바꿈"
},
"32": {
"path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'동물문제')])",
"path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'수익구조')])",
"value": true,
"points": 3,
"category": "Boolean",
"item": "문구 (…책임을 명확히 하고 문제를 유기동물 예방하는 데…)>'문제를 / 기동물' 순서바꿈"
"item": "문구 (…이익구조가 열악하다.…) > '이' → '수' 글자바꿈"
},
"33": {
"path": "//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape",
"searchValue": "동물등록현황(단위 : 백 건)",
"searchValue": "동영상 플랫폼 이용률(%)",
"value": "굴림체",
"points": 1,
"category": "FontName",
"item": "제목 문구 (동물등록현황(단위 : 백 건))/① 글씨체 (굴림체)"
"item": "제목 문구 (동영상 플랫폼 이용률(%))/① 글씨체 (굴림체)"
},
"34": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "동물등록현황(단위 : 백 건)",
"searchValue": "동영상 플랫폼 이용률(%)",
"value": "1200",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (동물등록현황(단위 : 백 건))/② 크기 (1200)"
"item": "제목 문구 (동영상 플랫폼 이용률(%))/② 크기 (1200)"
},
"35": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"searchValue": "동물등록현황(단위 : 백 건)",
"searchValue": "동영상 플랫폼 이용률(%)",
"value": "BOLD",
"points": 1,
"category": "FontAttribute",
"item": "제목 문구 (동물등록현황(단위 : 백 건))/③ 진하게"
"item": "제목 문구 (동영상 플랫폼 이용률(%))/③ 진하게"
},
"36": {
"path": "//PARASHAPE[@Id=//P[.//CHAR[text()='{searchValue}']]/@ParaShape]/@Align",
"searchValue": "동물등록현황(단위 : 백 건)",
"searchValue": "동영상 플랫폼 이용률(%)",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (동물등록현황(단위 : 백 건))/④ 정렬 (가운데 정렬)"
"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": "221,162,248",
"value": "95,229,218",
"points": 2,
"category": "Color",
"item": "위쪽 제목 셀/① 색상(RGB:221,162,248)"
"item": "위쪽 제목 셀/① 색상(RGB:95,229,218)"
},
"38": {
"path": "//CHARSHAPE[@Id=//TABLE/ROW[1]/descendant::TEXT/@CharShape]",
@@ -671,11 +675,11 @@
"41": {
"path": "//TABLE//TEXT/@CharShape",
"path2": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
"value": "굴림",
"value": "궁서체",
"points": 1,
"category": "TableFontName",
"category_tmp": "FontName",
"item": "글자모양/① 글씨체 (굴림)",
"item": "글자모양/① 글씨체 (궁서체)",
"desc": "테이블 폰트명 문항은 테이블의 모든 셀이 정답폰트와 일치해야 함, 하나만 일치해도 정답으로 채점할 경우 category값을 FontName으로 변경"
},
"42": {
@@ -711,10 +715,10 @@
"desc": "chart_type을 입력받아 차트타입에 맞는 xml요소가 있는지 내부적으로 검사, chart_type만 한글로 입력해주면 된다. (공백무시)"
},
"46": {
"chart_xpath": "//c:valAx/c:majorTickMark/@val",
"value": "out",
"chart_xpath": "//c:majorGridlines",
"value": true,
"points": 2,
"category": "ChartOneAnswer",
"category": "majorGridlines",
"item": "② 값 축 주 눈금선",
"desc": "chart xml파일에서 답안을 가져오는 문항은 path키값 대신 chart_xpath키값을 이용해 xapth구문을 작성한다"
},
@@ -742,36 +746,36 @@
},
"50": {
"chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r//a:ea/@typeface",
"searchValue": "동물등록현황",
"value": "궁서체",
"searchValue": "동영상 플랫폼 이용률",
"value": "굴림",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (동물등록현황)/① 글씨체 (궁서체)"
"item": "제목 문구 (동영상 플랫폼 이용률)/① 글씨체 (굴림)"
},
"51": {
"chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@sz",
"searchValue": "동물등록현황",
"value": "1300",
"searchValue": "동영상 플랫폼 이용률",
"value": "1400",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (동물등록현황)/② 크기 (1300)"
"item": "제목 문구 (동영상 플랫폼 이용률)/② 크기 (1400)"
},
"52": {
"chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@{option}",
"option": "b",
"searchValue": "동물등록현황",
"searchValue": "동영상 플랫폼 이용률",
"value": "1",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (동물등록현황)/③ 진하게",
"item": "제목 문구 (동영상 플랫폼 이용률)/③ 진하게",
"desc": "option값 - 기울임(Italic):i / 굵게(Bold):b"
},
"53": {
"chart_xpath": "//c:catAx/c:txPr//a:ea/@typeface",
"value": "굴림",
"value": "돋움체",
"points": 1,
"category": "ChartOneAnswer",
"item": "X축/① 글꼴 (굴림)"
"item": "X축/① 글꼴 (돋움체)"
},
"54": {
"chart_xpath": "//c:catAx/c:txPr//a:defRPr/@sz",
@@ -791,10 +795,10 @@
},
"56": {
"chart_xpath": "//c:valAx/c:txPr//a:ea/@typeface",
"value": "굴림",
"value": "돋움체",
"points": 1,
"category": "ChartOneAnswer",
"item": "Y축/① 글꼴 (굴림)"
"item": "Y축/① 글꼴 (돋움체)"
},
"57": {
"chart_xpath": "//c:valAx/c:txPr//a:defRPr/@sz",
@@ -814,10 +818,10 @@
},
"59": {
"chart_xpath": "//c:legend//a:ea/@typeface",
"value": "굴림",
"value": "돋움체",
"points": 1,
"category": "OneAnswer",
"item": "범례/① 글꼴 (굴림)"
"item": "범례/① 글꼴 (돋움체)"
},
"60": {
"chart_xpath": "//c:legend//a:defRPr/@sz",

10
HWP.code-workspace Normal file
View File

@@ -0,0 +1,10 @@
{
"folders": [
{
"path": "."
}
],
"settings": {
"terminal.integrated.cwd": "${workspaceFolder}"
}
}

View File

@@ -1,5 +1,3 @@
import tkinter as tk
from tkinter import filedialog, messagebox
from datetime import datetime
import difflib
import json
@@ -373,7 +371,7 @@ class XMLScorer:
# [1-16] ◈ 행사안내 ◈
# 특수문자와 글자의 속성이 같고 문서 내부에 '행사안내'와 같은 문자가 있을 경우
# 유사도 문제로 의도치 않은 부분의 속성이 채점되는것을 방지하고자
# 유사도 문제로 의도치 않은 다른 부분의 텍스트 속성이 채점되는것을 방지하고자
# 해당 문자를 포함하는 모든 문단의 속성을 판단해
# 정렬값이 정답과 일치하는 경우 정답으로 채점
elif (category or "") == "Align":
@@ -387,7 +385,35 @@ class XMLScorer:
self.evaluate_answer(scoring, user_answer, right_answer, points)
if scoring['points'] > 0:
break
elif (category or "") == "majorGridlines":
# 줄/칸 전환여부 확인
table_col_count = root.xpath("//SECTION[2]//TABLE/@ColCount")
print("🟡테이블 열 개수: ", int(table_col_count[0]) if table_col_count else 0)
chart_ser_count = chart_tree.xpath("count(//c:ser)", namespaces=namespaces) if chart_xpath else 0
print("🟡차트 데이터 개수: ", int(chart_ser_count) if isinstance(chart_ser_count, (int, float)) else 0)
isXYtransposed = False
if table_col_count and chart_ser_count:
if int(chart_ser_count) >= int(table_col_count[0]):
isXYtransposed = True
# 값 축 주눈금선 존재하는지 여부 확인
items = chart_tree.xpath(chart_xpath, namespaces=namespaces) if chart_xpath else []
for item in items:
# item이 존재하면 True, 없으면 False
user_answer = (item is not None) and isXYtransposed
# 정답과 수험자 답안 비교
self.evaluate_answer(scoring, user_answer, right_answer, points)
if scoring['points'] > 0:
break
# 정답이 하나인 경우
# elif (category or "") == "OneAnswer":
elif (category or "") in ["OneAnswer", "ChartOneAnswer"]:
@@ -732,6 +758,7 @@ class XMLScorer:
linespacing = root.xpath(xpath)
user_answer = linespacing[0]
# print("🟡줄간격: ", user_answer)
if user_answer != right_answer:
linespacing_match = False
break
@@ -741,7 +768,7 @@ class XMLScorer:
# 2. 해당 문제의 정답 줄간격 (180% = 28pt / 200% = 30pt )
# 두 경우의 글자 크기가 아니라면 오답처리
firstword = criterion.get('first_word', None)
result = root.xpath(f"//CHARSHAPE[@Id=//TEXT[CHAR[text()='{firstword}']]/@CharShape]/@Height")
result = root.xpath(f"//CHARSHAPE[@Id=//RECTANGLE//TEXT[CHAR[text()='{firstword}']]/@CharShape]/@Height")
firstword_size = result[0] if result else None
if (right_answer == '180' and firstword_size not in ['2600', '2800', None]) or (right_answer == '200' and firstword_size not in ['2600', '3000', None]):
@@ -1244,14 +1271,14 @@ class XMLScorer:
def main():
# 시험회차 및 유형
exam_round = '2506'
exam_round = '2507'
# exam_round = '2506_5'
# 채점하고자 하는 유형은 주석 해제
exam_types = [
# 'A',
# 'B',
'C',
'B',
# 'C',
# 'D',
]

View File

@@ -17197,3 +17197,55 @@
2025-07-04 17:17:19,014 - INFO - 변환 성공: 워드(한글)-006517-최지율.hwpx -> 워드(한글)-006517-최지율.hml
2025-07-04 17:17:19,364 - INFO - 변환 성공: 워드(한글)-006517-최지율2.hwpx -> 워드(한글)-006517-최지율2.hml
2025-07-04 17:17:19,713 - INFO - 폴더 변환 완료: C:\Users\dra\project\HWP\HWP-Scoring\input\2506\C\TEST -> C:\Users\dra\project\HWP\HWP-Scoring\output\2506\C\TEST
2025-07-28 16:18:21,443 - INFO - 폴더 변환 시작: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\A\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\A\DIW
2025-07-28 16:18:23,486 - INFO - 폴더 변환 완료: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\A\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\A\DIW
2025-07-28 16:18:23,987 - INFO - 폴더 변환 시작: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\B\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\B\DIW
2025-07-28 16:18:25,264 - INFO - 폴더 변환 완료: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\B\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\B\DIW
2025-07-28 16:18:25,766 - INFO - 폴더 변환 시작: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\C\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\C\DIW
2025-07-28 16:18:27,029 - INFO - 폴더 변환 완료: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\C\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\C\DIW
2025-07-28 16:18:27,530 - INFO - 폴더 변환 시작: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\D\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\D\DIW
2025-07-28 16:18:28,811 - INFO - 폴더 변환 완료: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\D\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\D\DIW
2025-07-28 16:18:29,312 - INFO - 폴더 변환 시작: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\E\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\E\DIW
2025-07-28 16:18:30,572 - INFO - 폴더 변환 완료: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\E\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\E\DIW
2025-07-28 16:19:32,905 - INFO - 폴더 변환 시작: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\A\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\A\DIW
2025-07-28 16:19:34,441 - INFO - 폴더 변환 완료: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\A\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\A\DIW
2025-07-28 16:19:34,942 - INFO - 폴더 변환 시작: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\B\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\B\DIW
2025-07-28 16:19:36,234 - INFO - 폴더 변환 완료: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\B\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\B\DIW
2025-07-28 16:19:36,735 - INFO - 폴더 변환 시작: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\C\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\C\DIW
2025-07-28 16:19:38,033 - INFO - 폴더 변환 완료: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\C\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\C\DIW
2025-07-28 16:19:38,535 - INFO - 폴더 변환 시작: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\D\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\D\DIW
2025-07-28 16:19:39,744 - INFO - 폴더 변환 완료: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\D\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\D\DIW
2025-07-28 16:19:40,245 - INFO - 폴더 변환 시작: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\E\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\E\DIW
2025-07-28 16:19:41,522 - INFO - 폴더 변환 완료: C:\Users\dra\project\HWP\HWP-Scoring\input\2507\E\DIW -> C:\Users\dra\project\HWP\HWP-Scoring\output\2507\E\DIW
2025-07-28 16:21:08,794 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2507\A\DIW -> D:\project\HWP\HWP-Scoring\output\2507\A\DIW
2025-07-28 16:21:12,498 - INFO - 변환 성공: DIW_2507A.hwpx -> DIW_2507A.hml
2025-07-28 16:21:12,935 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2507\A\DIW -> D:\project\HWP\HWP-Scoring\output\2507\A\DIW
2025-07-28 16:21:13,437 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2507\B\DIW -> D:\project\HWP\HWP-Scoring\output\2507\B\DIW
2025-07-28 16:26:30,901 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2507\A\DIW -> D:\project\HWP\HWP-Scoring\output\2507\A\DIW
2025-07-28 16:26:34,375 - INFO - 변환 성공: DIW_2507A.hwpx -> DIW_2507A.hml
2025-07-28 16:26:34,743 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2507\A\DIW -> D:\project\HWP\HWP-Scoring\output\2507\A\DIW
2025-07-28 16:26:35,244 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2507\B\DIW -> D:\project\HWP\HWP-Scoring\output\2507\B\DIW
2025-07-28 16:26:37,969 - INFO - 변환 성공: DIW_2507B.hwpx -> DIW_2507B.hml
2025-07-28 16:26:38,382 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2507\B\DIW -> D:\project\HWP\HWP-Scoring\output\2507\B\DIW
2025-07-28 16:26:38,883 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2507\C\DIW -> D:\project\HWP\HWP-Scoring\output\2507\C\DIW
2025-07-28 16:26:41,123 - INFO - 변환 성공: DIW_2507C.hwpx -> DIW_2507C.hml
2025-07-28 16:26:41,559 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2507\C\DIW -> D:\project\HWP\HWP-Scoring\output\2507\C\DIW
2025-07-28 16:26:42,061 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2507\D\DIW -> D:\project\HWP\HWP-Scoring\output\2507\D\DIW
2025-07-28 16:26:44,684 - INFO - 변환 성공: DIW_2507D.hwpx -> DIW_2507D.hml
2025-07-28 16:26:45,124 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2507\D\DIW -> D:\project\HWP\HWP-Scoring\output\2507\D\DIW
2025-07-28 16:26:45,625 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2507\E\DIW -> D:\project\HWP\HWP-Scoring\output\2507\E\DIW
2025-07-28 16:26:46,936 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2507\E\DIW -> D:\project\HWP\HWP-Scoring\output\2507\E\DIW
2025-07-28 16:33:39,305 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2507\A\DIW -> D:\project\HWP\HWP-Scoring\output\2507\A\DIW
2025-07-28 16:33:42,528 - INFO - 변환 성공: DIW_2507A.hwpx -> DIW_2507A.hml
2025-07-28 16:33:42,931 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2507\A\DIW -> D:\project\HWP\HWP-Scoring\output\2507\A\DIW
2025-07-28 16:33:43,431 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2507\B\DIW -> D:\project\HWP\HWP-Scoring\output\2507\B\DIW
2025-07-28 16:33:46,111 - INFO - 변환 성공: DIW_2507B.hwpx -> DIW_2507B.hml
2025-07-28 16:33:46,580 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2507\B\DIW -> D:\project\HWP\HWP-Scoring\output\2507\B\DIW
2025-07-28 16:33:47,081 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2507\C\DIW -> D:\project\HWP\HWP-Scoring\output\2507\C\DIW
2025-07-28 16:33:49,236 - INFO - 변환 성공: DIW_2507C.hwpx -> DIW_2507C.hml
2025-07-28 16:33:49,610 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2507\C\DIW -> D:\project\HWP\HWP-Scoring\output\2507\C\DIW
2025-07-28 16:33:50,111 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2507\D\DIW -> D:\project\HWP\HWP-Scoring\output\2507\D\DIW
2025-07-28 16:33:52,179 - INFO - 변환 성공: DIW_2507D.hwpx -> DIW_2507D.hml
2025-07-28 16:33:52,585 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2507\D\DIW -> D:\project\HWP\HWP-Scoring\output\2507\D\DIW
2025-07-28 16:33:53,087 - INFO - 폴더 변환 시작: D:\project\HWP\HWP-Scoring\input\2507\E\DIW -> D:\project\HWP\HWP-Scoring\output\2507\E\DIW
2025-07-28 16:33:54,437 - INFO - 폴더 변환 완료: D:\project\HWP\HWP-Scoring\input\2507\E\DIW -> D:\project\HWP\HWP-Scoring\output\2507\E\DIW

View File

@@ -1 +1 @@
[{"kind":2,"language":"xpath","value":"//a:t[text()='클라우드 보안투자']/ancestor::a:r//a:ea/@typeface"},{"kind":2,"language":"xpath","value":"boolean(//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE/FONTID/@Hangul]/@Name='바탕' and //CHARSHAPE/@Height='1000' and //PARASHAPE/PARAMARGIN/@LineSpacing='160' and //PARASHAPE/@Align='Justify')"},{"kind":2,"language":"xpath","value":"//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE/FONTID/@Hangul]/@Name='바탕'"},{"kind":2,"language":"xpath","value":"//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE/FONTID/@Hangul]/@Name='바탕' and //CHARSHAPE/@Height='1000' and //PARASHAPE/PARAMARGIN/@LineSpacing='160' and //PARASHAPE/@Align='Justify')"},{"kind":2,"language":"xpath","value":"//PARASHAPE[@Id=//CHAR[contains(text(),'사업안내')]/ancestor::P/@ParaShape]/@Align"},{"kind":2,"language":"xpath","value":"//CHAR[contains(text(),'행사안내')]"},{"kind":2,"language":"xpath","value":"//BINITEM[@BinData=//PICTURE/IMAGE/@BinItem][@Format=\"JPG\"]"},{"kind":2,"language":"xpath","value":"//P[.//FIELDBEGIN[@Type='Hyperlink'] and .//CHAR[contains(., 'http')]]"},{"kind":2,"language":"xpath","value":"//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true')]/@HorzOffset"},{"kind":2,"language":"xpath","value":"//CHAR[contains(string(.), '※')]/descendant-or-self::text()"},{"kind":2,"language":"xpath","value":"//P[@ParaShape=\"17\"]/TEXT[@CharShape='7']//CHAR[string(.)]"},{"kind":2,"language":"xpath","value":"//CHAR[contains(string(.), '기타')]/text()"}]
[{"kind":2,"language":"xpath","value":"//a:t[text()='클라우드 보안투자']/ancestor::a:r//a:ea/@typeface"},{"kind":2,"language":"xpath","value":"boolean(//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE/FONTID/@Hangul]/@Name='바탕' and //CHARSHAPE/@Height='1000' and //PARASHAPE/PARAMARGIN/@LineSpacing='160' and //PARASHAPE/@Align='Justify')"},{"kind":2,"language":"xpath","value":"//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE/FONTID/@Hangul]/@Name='바탕'"},{"kind":2,"language":"xpath","value":"//SECTION[2]//TABLE/@ColCount"},{"kind":2,"language":"xpath","value":"count(//c:ser) > 2"},{"kind":2,"language":"xpath","value":"//CHARSHAPE[@Id=//RECTANGLE//TEXT[CHAR[text()='여']]/@CharShape]/@Height"},{"kind":2,"language":"xpath","value":"//c:majorGridlines"},{"kind":2,"language":"xpath","value":"//P[.//FIELDBEGIN[@Type='Hyperlink'] and .//CHAR[contains(., 'http')]]"},{"kind":2,"language":"xpath","value":"//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true')]/@HorzOffset"},{"kind":2,"language":"xpath","value":"//CHAR[contains(string(.), '※')]/descendant-or-self::text()"},{"kind":2,"language":"xpath","value":"//P[@ParaShape=\"17\"]/TEXT[@CharShape='7']//CHAR[string(.)]"},{"kind":2,"language":"xpath","value":"//CHAR[contains(string(.), '기타')]/text()"}]

View File

@@ -46,65 +46,65 @@
"1": {
"1": {
"path": "//TEXTART[@Text='{searchValue}']/TEXTARTSHAPE/@FontName",
"searchValue": "생활가전수거캠페인",
"value": "굴림체",
"searchValue": "한국평생교육학회학술포럼",
"value": "궁서체",
"points": 1,
"category": "OneAnswer",
"item": "문구 (생활가전수거캠페인)/① 글씨체 (굴림체)"
"item": "문구 (한국평생교육학회학술포럼)/① 글씨체 (궁서체)"
},
"2": {
"path": "//TEXTART[@Text='{searchValue}']/descendant::WINDOWBRUSH/@FaceColor",
"searchValue": "생활가전수거캠페인",
"value": "209,114,108",
"searchValue": "한국평생교육학회학술포럼",
"value": "48,117,196",
"points": 2,
"category": "Color",
"item": "문구 (생활가전수거캠페인)/② 채우기 : 색상(RGB:209,114,108)"
"item": "문구 (한국평생교육학회학술포럼)/② 채우기 : 색상(RGB:48,117,196)"
},
"3": {
"path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Width",
"searchValue": "생활가전수거캠페인",
"value": "110",
"searchValue": "한국평생교육학회학술포럼",
"value": "130",
"tolerance": 1,
"points": 2,
"category": "mmSize",
"item": "문구 (생활가전수거캠페인)/③ 크기-너비 (110 mm)"
"item": "문구 (한국평생교육학회학술포럼)/③ 크기-너비 (130 mm)"
},
"4": {
"path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Height",
"searchValue": "생활가전수거캠페인",
"searchValue": "한국평생교육학회학술포럼",
"value": "20",
"tolerance": 1,
"points": 2,
"category": "mmSize",
"item": "문구 (생활가전수거캠페인)/④ 크기-높이 (20 mm)"
"item": "문구 (한국평생교육학회학술포럼)/④ 크기-높이 (20 mm)"
},
"5": {
"path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/POSITION/@TreatAsChar",
"searchValue": "생활가전수거캠페인",
"searchValue": "한국평생교육학회학술포럼",
"value": "true",
"points": 2,
"category": "OneAnswer",
"item": "문구 (생활가전수거캠페인)/⑤ 위치 (글자처럼 취급)"
"item": "문구 (한국평생교육학회학술포럼)/⑤ 위치 (글자처럼 취급)"
},
"6": {
"path": "//PARASHAPE[@Id=//P[.//TEXTART[@Text='{searchValue}']]/@ParaShape]/@Align",
"searchValue": "생활가전수거캠페인",
"searchValue": "한국평생교육학회학술포럼",
"value": "Center",
"points": 2,
"category": "OneAnswer",
"item": "문구 (생활가전수거캠페인)/⑥ 정렬 (가운데 정렬)"
"item": "문구 (한국평생교육학회학술포럼)/⑥ 정렬 (가운데 정렬)"
},
"7": {
"path": "//TEXTART[@Text='{searchValue}']",
"searchValue": "생활가전수거캠페인",
"searchValue": "한국평생교육학회학술포럼",
"value": true,
"points": 2,
"category": "Boolean",
"item": "문구 (생활가전수거캠페인)/⑦ 글맵시모양 (육안확인)"
"item": "문구 (한국평생교육학회학술포럼)/⑦ 글맵시모양 (육안확인)"
},
"8": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/SIZE",
"searchValue": "",
"searchValue": "",
"value": {
"Height": 2800,
"Width": 2800
@@ -112,94 +112,94 @@
"tolerance": 200,
"points": 1,
"category": "TwoLineSize",
"item": "/① 모양 (2줄)"
"item": "/① 모양 (2줄)"
},
"9": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "",
"value": "중고딕",
"searchValue": "",
"value": "굴림",
"points": 1,
"category": "FontName",
"item": "/② 글씨체 (중고딕)"
"item": "/② 글씨체 (굴림)"
},
"10": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor",
"searchValue": "",
"value": "230,209,48",
"searchValue": "",
"value": "248,190,122",
"points": 2,
"category": "Color",
"item": "/③ 면색 : 색상(RGB:230,209,48)"
"item": "/③ 면색 : 색상(RGB:248,190,122)"
},
"11": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//OUTSIDEMARGIN/@Right",
"searchValue": "",
"searchValue": "",
"value": "3.0",
"tolerance": 1,
"points": 2,
"category": "mmSize",
"item": "/④ 본문과의 간격 : 3.0mm"
"item": "/④ 본문과의 간격 : 3.0mm"
},
"12": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]",
"searchValue": "2025년 7월부터 생활가전수거 캠페인을 시행",
"searchValue": "평생교육사 양성 교육과정 현황과 개선 방안 탐색",
"value": "BOLD",
"points": 2,
"category": "FontAttribute",
"item": "문구 (2025년 7월부터 생활가전수거 캠페인을 시행)/① BOLD"
"item": "문구 (평생교육사 양성 교육과정 현황과 개선 방안 탐색)/① BOLD"
},
"13": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]",
"searchValue": "2025년 7월부터 생활가전수거 캠페인을 시행",
"searchValue": "평생교육사 양성 교육과정 현황과 개선 방안 탐색",
"value": "UNDERLINE",
"points": 2,
"category": "FontAttribute",
"item": "문구 (2025년 7월부터 생활가전수거 캠페인을 시행)/② UNDERLINE"
"item": "문구 (평생교육사 양성 교육과정 현황과 개선 방안 탐색)/② UNDERLINE"
},
"14": {
"path": "//CHAR[contains(string(.),'{char1}')]/text()",
"path2": "//CHAR[contains(string(.),'{char2}')]/text()",
"path3": "//CHAR[contains(string(.),'{char3}')]/text()",
"char1": "",
"char2": "",
"char1": "",
"char2": "",
"char3": "※",
"value": 3,
"points": 3,
"category": "SpecialChar",
"item": "① , ② , ③ ※"
"item": "① , ② , ③ ※"
},
"15": {
"path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape",
"searchValue": "홍보안내",
"value": "돋움",
"searchValue": "행사안내",
"value": "궁서",
"points": 1,
"category": "FontName",
"item": "문구 (● 홍보안내 )/① 글씨체 (돋움)"
"item": "문구 (◆ 행사안내 )/① 글씨체 (궁서)"
},
"16": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{match_str}')]/ancestor::P/@ParaShape]/@Align",
"match_str": "홍보안내",
"match_str": "행사안내",
"value": "Center",
"points": 1,
"category": "Align",
"item": "문구 (● 홍보안내 )/② 정렬 (가운데 정렬)"
"item": "문구 (◆ 행사안내 )/② 정렬 (가운데 정렬)"
},
"17": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]",
"searchValue": "서울시 25개 자치구 및 인근 지역",
"value": "BOLD",
"searchValue": "한국평생교육학회 홈페이지(http://www.ihd.or.kr) 참조",
"value": "ITALIC",
"points": 1,
"category": "FontAttribute",
"item": "문구 (서울시 25개 자치구 및 인근 지역)/① BOLD"
"item": "문구 (한국평생교육학회 홈페이지(http://www.ihd.or.kr) 참조)/① ITALIC"
},
"18": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]",
"searchValue": "서울시 25개 자치구 및 인근 지역",
"value": "ITALIC",
"searchValue": "한국평생교육학회 홈페이지(http://www.ihd.or.kr) 참조",
"value": "UNDERLINE",
"points": 1,
"category": "FontAttribute",
"item": "문구 (서울시 25개 자치구 및 인근 지역)/② ITALIC"
"item": "문구 (한국평생교육학회 홈페이지(http://www.ihd.or.kr) 참조)/② UNDERLINE"
},
"19": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN",
@@ -215,52 +215,52 @@
},
"20": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
"searchValue": "2025. 06. 28.",
"searchValue": "2025. 07. 26.",
"value": "1300",
"points": 1,
"category": "OneAnswer",
"item": "문구 (2025. 06. 28.)/① 크기 (1300)",
"item": "문구 (2025. 07. 26.)/① 크기 (1300)",
"desc": "1pt당 100"
},
"21": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
"searchValue": "2025. 06. 28.",
"searchValue": "2025. 07. 26.",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (2025. 06. 28.)/② 정렬 (가운데 정렬)"
"item": "문구 (2025. 07. 26.)/② 정렬 (가운데 정렬)"
},
"22": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "한국자원순환센터",
"value": "궁서",
"searchValue": "한국평생교육학회",
"value": "견고딕",
"points": 1,
"category": "FontName",
"item": "문구 (한국자원순환센터)/① 글씨체 (궁서)"
"item": "문구 (한국평생교육학회)/① 글씨체 (견고딕)"
},
"23": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "한국자원순환센터",
"value": "2400",
"searchValue": "한국평생교육학회",
"value": "2500",
"points": 1,
"category": "OneAnswer",
"item": "문구 (한국자원순환센터)/② 크기 (2400)"
"item": "문구 (한국평생교육학회)/② 크기 (2500)"
},
"24": {
"path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/ancestor::P/@ParaShape]/@Align",
"searchValue": "한국자원순환센터",
"searchValue": "한국평생교육학회",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (한국자원순환센터)/③ 정렬 (가운데 정렬)"
"item": "문구 (한국평생교육학회)/③ 정렬 (가운데 정렬)"
},
"25": {
"path": "//SECTION[1]//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "DIAT",
"value": "굴림",
"value": "굴림",
"points": 1,
"category": "FontName",
"item": "문구 (DIAT)/① 글꼴 (굴림)"
"item": "문구 (DIAT)/① 글꼴 (굴림)"
},
"26": {
"path": "//CHARSHAPE[@Id=//SECTION[1]//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
@@ -280,7 +280,7 @@
},
"28": {
"path": "//PAGENUM/@FormatType",
"value": "HangulSyllable",
"value": "LatinCapital",
"points": 2,
"category": "PageNumber",
"item": "① 쪽 번호 매기기 (가,나,다 순으로)",
@@ -296,26 +296,29 @@
"ⓐ,ⓑ,ⓒ": "CircledLatinSmall",
"i,ii,iii": "RomanSmall",
"I,II,III": "RomanCapital",
"甲,乙,丙": "DecagonCircleHanja",
"+,++,+++": "UserChar",
"desc": "정답에 맞는 값 value에 입력"
},
"desc2": "1, 2페이지 모두 정답이어야 점수 부여"
},
"29": {
"path": "//PAGENUM/@Pos",
"value": "BottomCenter",
"value": "BottomRight",
"points": 2,
"category": "PageNumber",
"item": "오른쪽 아래",
"desc": "1, 2페이지 모두 정답이어야 점수 부여",
"desc2": {
"왼쪽 아래": "BottomLeft",
"가운데 아래": "BottomCenter",
"오른쪽 아래": "BottomRight"
}
},
"30": {
"path": "//PARASHAPE[@Id='{parashape_id}']/PARAMARGIN/@LineSpacing",
"value": "180",
"first_word": "",
"value": "200",
"first_word": "",
"points": 2,
"category": "LineSpacing",
"item": "문제 1 줄간격 180% 설정",
@@ -351,89 +354,89 @@
},
"4": {
"path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Width",
"searchValue": "자원순환",
"value": "60",
"searchValue": "평생교육시대",
"value": "65",
"points": 2,
"category": "mmSize",
"item": "문구 (자원순환)/① 크기-너비 (60 mm)"
"item": "문구 (평생교육시대)/① 크기-너비 (65 mm)"
},
"5": {
"path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Height",
"searchValue": "자원순환",
"searchValue": "평생교육시대",
"value": "12",
"points": 2,
"category": "mmSize",
"item": "문구 (자원순환)/② 크기-높이 (12 mm)"
"item": "문구 (평생교육시대)/② 크기-높이 (12 mm)"
},
"6": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//LINESHAPE",
"searchValue": "자원순환",
"searchValue": "평생교육시대",
"value": {
"Style": "DoubleSlim",
"Width": "283"
},
"points": 2,
"category": "LineShape",
"item": "문구 (자원순환)/③ 테두리 : 이중 실선(1.00mm)",
"item": "문구 (평생교육시대)/③ 테두리 : 이중 실선(1.00mm)",
"desc": "1mm = 283pt value['Width']에 pt값 입력"
},
"7": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/@Ratio",
"searchValue": "자원순환",
"value": "50",
"searchValue": "평생교육시대",
"value": "20",
"points": 2,
"category": "OneAnswer",
"item": "문구 (자원순환)/④ 글상자 모서리 (반원)",
"item": "문구 (평생교육시대)/④ 글상자 모서리 (반원)",
"desc": "모서리 비율 반원:50 / 둥근모양:20"
},
"8": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor",
"searchValue": "자원순환",
"value": "131,194,68",
"searchValue": "평생교육시대",
"value": "224,122,146",
"points": 2,
"category": "Color",
"item": "문구 (자원순환)/⑤ 채우기 : 색상(RGB:131,194,68)"
"item": "문구 (평생교육시대)/⑤ 채우기 : 색상(RGB:224,122,146)"
},
"9": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/POSITION/@TreatAsChar",
"searchValue": "자원순환",
"searchValue": "평생교육시대",
"value": "true",
"points": 1,
"category": "OneAnswer",
"item": "문구 (자원순환)/⑥ 글상자 위치 (글자처럼 취급)"
"item": "문구 (평생교육시대)/⑥ 글상자 위치 (글자처럼 취급)"
},
"10": {
"path": "//PARASHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::P[last()]/@ParaShape]/@Align",
"searchValue": "자원순환",
"searchValue": "평생교육시대",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (자원순환)/⑦ 글상자 정렬 (가운데 정렬)"
"item": "문구 (평생교육시대)/⑦ 글상자 정렬 (가운데 정렬)"
},
"11": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "자원순환",
"value": "궁서체",
"searchValue": "평생교육시대",
"value": "휴먼옛체",
"points": 1,
"category": "FontName",
"item": "문구 (자원순환)/⑧ 글씨체 (궁서체)"
"item": "문구 (평생교육시대)/⑧ 글씨체 (휴먼옛체)"
},
"12": {
"path": "//CHARSHAPE[@Id=//RECTANGLE//TEXT[./CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "자원순환",
"searchValue": "평생교육시대",
"value": "2000",
"points": 1,
"category": "OneAnswer",
"item": "문구 (자원순환)/⑨ 글씨크기 (2000)",
"item": "문구 (평생교육시대)/⑨ 글씨크기 (2000)",
"desc": "1pt당 100"
},
"13": {
"path": "//PARASHAPE[@Id=//RECTANGLE//P[.//CHAR[text()='{searchValue}']]/@ParaShape]/@Align",
"searchValue": "자원순환",
"searchValue": "평생교육시대",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (자원순환)/⑩ 정렬 (가운데 정렬)"
"item": "문구 (평생교육시대)/⑩ 정렬 (가운데 정렬)"
},
"14": {
"path": "//BINITEM[@BinData=//PICTURE/IMAGE/@BinItem][@Format='JPG']",
@@ -466,88 +469,88 @@
},
"18": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@VertOffset",
"value": "22",
"value": "24",
"points": 2,
"category": "mmSize",
"item": "⑤ 위치 (어울림 : 세로-쪽의 위 22 mm)"
"item": "⑤ 위치 (어울림 : 세로-쪽의 위 24 mm)"
},
"19": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "1. 자원순환의 필요성",
"value": "돋움",
"searchValue": "1. 평생교육이란?",
"value": "굴림",
"points": 1,
"category": "FontName",
"item": "문구① (1. 자원순환의 필요성)/① 글씨체 (돋움)"
"item": "문구① (1. 평생교육이란?)/① 글씨체 (굴림)"
},
"20": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "1. 자원순환의 필요성",
"searchValue": "1. 평생교육이란?",
"value": "1200",
"points": 1,
"category": "OneAnswer",
"item": "문구① (1. 자원순환의 필요성)/② 크기 (12pt)"
"item": "문구① (1. 평생교육이란?)/② 크기 (12pt)"
},
"21": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"searchValue": "1. 자원순환의 필요성",
"searchValue": "1. 평생교육이란?",
"value": "BOLD",
"points": 1,
"category": "FontAttribute",
"item": "문구① (1. 자원순환의 필요성)/③ 진하게"
"item": "문구① (1. 평생교육이란?)/③ 진하게"
},
"22": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "2. 자원순환 실천 방법",
"value": "돋움",
"searchValue": "2. 평생교육사의 개념",
"value": "굴림",
"points": 1,
"category": "FontName",
"item": "문구② (2. 자원순환 실천 방법)/① 글씨체 (돋움)"
"item": "문구② (2. 평생교육사의 개념)/① 글씨체 (굴림)"
},
"23": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "2. 자원순환 실천 방법",
"searchValue": "2. 평생교육사의 개념",
"value": "1200",
"points": 1,
"category": "OneAnswer",
"item": "문구② (2. 자원순환 실천 방법)/② 크기 (1200)"
"item": "문구② (2. 평생교육사의 개념)/② 크기 (1200)"
},
"24": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"searchValue": "2. 자원순환 실천 방법",
"searchValue": "2. 평생교육사의 개념",
"value": "BOLD",
"points": 1,
"category": "FontAttribute",
"item": "문구② (2. 자원순환 실천 방법)/③ 진하게"
"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": "온실가스",
"option": "유네스코",
"value": true,
"points": 2,
"category": "Boolean",
"item": "문구 (온실가스)/① 각주 설정 및 문구 입력"
"item": "문구 (유네스코)/① 각주 설정 및 문구 입력"
},
"26": {
"path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape",
"searchValue": "땅으로 복사되는 에너지를 흡수하여 온실효과를 내는 기체",
"value": "바탕체",
"searchValue": "교육, 과학, 문화의 보급 및 교류를 통하여 국가 간의 협력 증진을 목적으로 설립된 국제연합전문기구",
"value": "궁서",
"points": 1,
"category": "FontName",
"item": "문구 (온실가스)/② 글씨체 (바탕체)"
"item": "문구 (유네스코)/② 글씨체 (궁서)"
},
"27": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape]/@Height",
"searchValue": "땅으로 복사되는 에너지를 흡수하여 온실효과를 내는 기체",
"searchValue": "교육, 과학, 문화의 보급 및 교류를 통하여 국가 간의 협력 증진을 목적으로 설립된 국제연합전문기구",
"value": "900",
"points": 1,
"category": "OneAnswer",
"item": "문구 (온실가스)/③ 크기 (9pt)"
"item": "문구 (유네스코)/③ 크기 (9pt)"
},
"28": {
"path": "//P[TEXT[CHAR[contains(text(), '{searchValue}')]]]//AUTONUMFORMAT/@Type",
"searchValue": "땅으로 복사되는 에너지를 흡수하여 온실효과를 내는 기체",
"value": "CircledDigit",
"searchValue": "교육, 과학, 문화의 보급 및 교류를 통하여 국가 간의 협력 증진을 목적으로 설립된 국제연합전문기구",
"value": "UserChar",
"points": 2,
"category": "OneAnswer",
"item": "문구 (전당)/④ 각주 번호모양",
@@ -563,85 +566,87 @@
"ⓐ,ⓑ,ⓒ": "CircledLatinSmall",
"i,ii,iii": "RomanSmall",
"I,II,III": "RomanCapital",
"甲,乙,丙": "DecagonCircleHanja",
"+,++,+++": "UserChar",
"정답에 맞는 값 value에 입력": ""
}
},
"29": {
"path": "boolean(//CHAR[contains(text(),'Platform')])",
"ignoreWord": "Platform",
"path": "boolean(//CHAR[contains(text(),'Development')])",
"ignoreWord": "Development",
"value": true,
"points": 3,
"category": "Boolean",
"item": "Platform/영단어 미입력, 대소문자/오타 시 전체 감점",
"item": "Development/영단어 미입력, 대소문자/오타 시 전체 감점",
"desc": "유사도 검사를 진행하지 않고 영단어가 모두 일치해야 하므로 xpath구문 내 단어도 수정필요"
},
"30": {
"path": "//CHAR[contains(text(),'{kor}')][contains(text(),'{chn}')]",
"word": [
["이익", "利益"],
["환경", "環境"],
["실천", "實踐"],
["낭비", "浪費"],
["촉진", "促進"]
["평생", "平生"],
["교육", "敎育"],
["신념", "信念"],
["현장", "現場"],
["자격", "資格"]
],
"value": 10,
"points": 10,
"category": "Hanja",
"item": "① 이익(利益), ② 환경(環境), ③ 실천(實踐), ④ 낭비(浪費), ⑤ 촉진(促進)"
"item": "① 평생(平生), ② 교육(敎育), ③ 신념(信念), ④ 현장(現場), ⑤ 자격(資格)"
},
"31": {
"path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'경을보호')])",
"path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'하는사람')])",
"value": true,
"points": 3,
"category": "Boolean",
"item": "문구 (…또한 보호하는 환경을 지속 가능한 발전을…) > 보호하는 / 환경을 순서바꿈"
"item": "문구 (…어느 하나에 사람에게 해당하는 평생교육사의…) > '사람에게'/'해당하는' 순서바꿈"
},
"32": {
"path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'건의수명')])",
"path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'21과목')])",
"value": true,
"points": 3,
"category": "Boolean",
"item": "문구 (…낭비(浪費)하지 않고 물건이 수명을 연장하는 데…) > 이 → 의 글자바꿈"
"item": "문구 (…총 21종목이다…)>'종' → '과' 글자바꿈"
},
"33": {
"path": "//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape",
"searchValue": "연도별 자원순환율 추이(%)",
"value": "굴림체",
"searchValue": "평생교육사 자격증 발급(단위: 명)",
"value": "돋움",
"points": 1,
"category": "FontName",
"item": "제목 문구 (연도별 자원순환율 추이(%))/① 글씨체 (굴림체)"
"item": "제목 문구 (평생교육사 자격증 발급(단위: 명))/① 글씨체 (돋움)"
},
"34": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "연도별 자원순환율 추이(%)",
"searchValue": "평생교육사 자격증 발급(단위: 명)",
"value": "1200",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (연도별 자원순환율 추이(%))/② 크기 (1200)"
"item": "제목 문구 (평생교육사 자격증 발급(단위: 명))/② 크기 (1200)"
},
"35": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"searchValue": "연도별 자원순환율 추이(%)",
"searchValue": "평생교육사 자격증 발급(단위: 명)",
"value": "BOLD",
"points": 1,
"category": "FontAttribute",
"item": "제목 문구 (연도별 자원순환율 추이(%))/③ 진하게"
"item": "제목 문구 (평생교육사 자격증 발급(단위: 명))/③ 진하게"
},
"36": {
"path": "//PARASHAPE[@Id=//P[.//CHAR[text()='{searchValue}']]/@ParaShape]/@Align",
"searchValue": "연도별 자원순환율 추이(%)",
"searchValue": "평생교육사 자격증 발급(단위: 명)",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (연도별 자원순환율 추이(%))/④ 정렬 (가운데 정렬)"
"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": "235,179,218",
"value": "233,174,43",
"points": 2,
"category": "Color",
"item": "위쪽 제목 셀/① 색상(RGB:235,179,218)"
"item": "위쪽 제목 셀/① 색상(RGB:233,174,43)"
},
"38": {
"path": "//CHARSHAPE[@Id=//TABLE/ROW[1]/descendant::TEXT/@CharShape]",
@@ -670,11 +675,11 @@
"41": {
"path": "//TABLE//TEXT/@CharShape",
"path2": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
"value": "돋움",
"value": "중고딕",
"points": 1,
"category": "TableFontName",
"category_tmp": "FontName",
"item": "글자모양/① 글씨체 (돋움)",
"item": "글자모양/① 글씨체 (중고딕)",
"desc": "테이블 폰트명 문항은 테이블의 모든 셀이 정답폰트와 일치해야 함, 하나만 일치해도 정답으로 채점할 경우 category값을 FontName으로 변경"
},
"42": {
@@ -693,7 +698,7 @@
},
"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": "AVG",
"option": "SUM",
"value": true,
"points": 4,
"category": "Boolean",
@@ -742,10 +747,10 @@
"50": {
"chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r//a:ea/@typeface",
"searchValue": "연도별 자원순환율 추이",
"value": "궁서체",
"value": "바탕체",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (연도별 자원순환율 추이)/① 글씨체 (궁서체)"
"item": "제목 문구 (연도별 자원순환율 추이)/① 글씨체 (바탕체)"
},
"51": {
"chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@sz",

View File

@@ -46,65 +46,65 @@
"1": {
"1": {
"path": "//TEXTART[@Text='{searchValue}']/TEXTARTSHAPE/@FontName",
"searchValue": "태국문화체험페스티벌안내",
"value": "궁서",
"searchValue": "슬기로운미디어생활특강안내",
"value": "휴먼옛체",
"points": 1,
"category": "OneAnswer",
"item": "문구 (태국문화체험페스티벌안내)/① 글씨체 (궁서)"
"item": "문구 (슬기로운미디어생활특강안내)/① 글씨체 (휴먼옛체)"
},
"2": {
"path": "//TEXTART[@Text='{searchValue}']/descendant::WINDOWBRUSH/@FaceColor",
"searchValue": "태국문화체험페스티벌안내",
"value": "79,156,22",
"searchValue": "슬기로운미디어생활특강안내",
"value": "53,149,164",
"points": 2,
"category": "Color",
"item": "문구 (태국문화체험페스티벌안내)/② 채우기 : 색상(RGB:79,156,22)"
"item": "문구 (슬기로운미디어생활특강안내)/② 채우기 : 색상(RGB:53,149,164)"
},
"3": {
"path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Width",
"searchValue": "태국문화체험페스티벌안내",
"value": "130",
"searchValue": "슬기로운미디어생활특강안내",
"value": "110",
"tolerance": 1,
"points": 2,
"category": "mmSize",
"item": "문구 (태국문화체험페스티벌안내)/③ 크기-너비 (130 mm)"
"item": "문구 (슬기로운미디어생활특강안내)/③ 크기-너비 (110mm)"
},
"4": {
"path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Height",
"searchValue": "태국문화체험페스티벌안내",
"searchValue": "슬기로운미디어생활특강안내",
"value": "20",
"tolerance": 1,
"points": 2,
"category": "mmSize",
"item": "문구 (태국문화체험페스티벌안내)/④ 크기-높이 (20 mm)"
"item": "문구 (슬기로운미디어생활특강안내)/④ 크기-높이 (20 mm)"
},
"5": {
"path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/POSITION/@TreatAsChar",
"searchValue": "태국문화체험페스티벌안내",
"searchValue": "슬기로운미디어생활특강안내",
"value": "true",
"points": 2,
"category": "OneAnswer",
"item": "문구 (태국문화체험페스티벌안내)/⑤ 위치 (글자처럼 취급)"
"item": "문구 (슬기로운미디어생활특강안내)/⑤ 위치 (글자처럼 취급)"
},
"6": {
"path": "//PARASHAPE[@Id=//P[.//TEXTART[@Text='{searchValue}']]/@ParaShape]/@Align",
"searchValue": "태국문화체험페스티벌안내",
"searchValue": "슬기로운미디어생활특강안내",
"value": "Center",
"points": 2,
"category": "OneAnswer",
"item": "문구 (태국문화체험페스티벌안내)/⑥ 정렬 (가운데 정렬)"
"item": "문구 (슬기로운미디어생활특강안내)/⑥ 정렬 (가운데 정렬)"
},
"7": {
"path": "//TEXTART[@Text='{searchValue}']",
"searchValue": "태국문화체험페스티벌안내",
"searchValue": "슬기로운미디어생활특강안내",
"value": true,
"points": 2,
"category": "Boolean",
"item": "문구 (태국문화체험페스티벌안내)/⑦ 글맵시모양 (육안확인)"
"item": "문구 (슬기로운미디어생활특강안내)/⑦ 글맵시모양 (육안확인)"
},
"8": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/SIZE",
"searchValue": "",
"searchValue": "",
"value": {
"Height": 2800,
"Width": 2800
@@ -112,68 +112,68 @@
"tolerance": 200,
"points": 1,
"category": "TwoLineSize",
"item": "/① 모양 (2줄)"
"item": "/① 모양 (2줄)"
},
"9": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "",
"value": "맑은 고딕",
"searchValue": "",
"value": "맑은고딕",
"points": 1,
"category": "FontName",
"item": "/② 글씨체 (맑은 고딕)"
"item": "/② 글씨체 (맑은고딕)"
},
"10": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor",
"searchValue": "",
"value": "244,212,29",
"searchValue": "",
"value": "172,235,62",
"points": 2,
"category": "Color",
"item": "/③ 면색 : 색상(RGB:244,212,29)"
"item": "/③ 면색 : 색상(RGB:172,235,62)"
},
"11": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//OUTSIDEMARGIN/@Right",
"searchValue": "",
"searchValue": "",
"value": "3.0",
"tolerance": 1,
"points": 2,
"category": "mmSize",
"item": "/④ 본문과의 간격 : 3.0mm"
"item": "/④ 본문과의 간격 : 3.0mm"
},
"12": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]",
"searchValue": "태국의 아름다운 문화와 함께 잊지 못할 추억을 만들어보세요!",
"value": "BOLD",
"points": 2,
"category": "FontAttribute",
"item": "문구 (태국의 아름다운 문화와 함께 잊지 못할 추억을 만들어보세요!)/① BOLD"
},
"13": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]",
"searchValue": "태국의 아름다운 문화와 함께 잊지 못할 추억을 만들어보세요!",
"searchValue": "동영상 콘텐츠의 현재와 미래",
"value": "ITALIC",
"points": 2,
"category": "FontAttribute",
"item": "문구 (태국의 아름다운 문화와 함께 잊지 못할 추억을 만들어보세요!)/ ITALIC"
"item": "문구 (동영상 콘텐츠의 현재와 미래)/ ITALIC"
},
"13": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]",
"searchValue": "동영상 콘텐츠의 현재와 미래",
"value": "UNDERLINE",
"points": 2,
"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": "",
"char1": "",
"char2": "",
"char3": "※",
"value": 3,
"points": 3,
"category": "SpecialChar",
"item": "① , ② , ③ ※"
"item": "① , ② , ③ ※"
},
"15": {
"path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape",
"searchValue": "행사안내",
"value": "돋움",
"value": "궁서",
"points": 1,
"category": "FontName",
"item": "문구 ( 행사안내 )/① 글씨체 (돋움)"
"item": "문구 ( 행사안내 )/① 글씨체 (궁서)"
},
"16": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{match_str}')]/ancestor::P/@ParaShape]/@Align",
@@ -181,25 +181,25 @@
"value": "Center",
"points": 1,
"category": "Align",
"item": "문구 ( 행사안내 )/② 정렬 (가운데 정렬)"
"item": "문구 ( 행사안내 )/② 정렬 (가운데 정렬)"
},
"17": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]",
"searchValue": "오전/오후 총 2회",
"value": "ITALIC",
"searchValue": "중랑미디어센터 홈페이지(http://www.ihd.or.kr) 슬기로운 미디어 생활",
"value": "BOLD",
"points": 1,
"category": "FontAttribute",
"item": "문구 (오전/오후 총 2회)/① ITALIC"
"item": "문구 (중랑미디어센터 홈페이지(http://www.ihd.or.kr) 슬기로운 미디어 생활)/① BOLD"
},
"18": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]",
"searchValue": "오전/오후 총 2회",
"value": "UNDERLINE",
"searchValue": "중랑미디어센터 홈페이지(http://www.ihd.or.kr) 슬기로운 미디어 생활",
"value": "ITALIC",
"points": 1,
"category": "FontAttribute",
"item": "문구 (오전/오후 총 2회)/② UNDERLINE"
"item": "문구 (중랑미디어센터 홈페이지(http://www.ihd.or.kr) 슬기로운 미디어 생활)/② ITALIC"
},
"19": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN",
@@ -210,57 +210,57 @@
},
"points": 2,
"category": "ParaShape",
"item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (10pt), 내어쓰기 (12pt)",
"item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (15pt), 내어쓰기 (12pt)",
"desc": "내부적으로 내어쓰기는 음수값 / JSON value값은 양수로 입력"
},
"20": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
"searchValue": "2025. 06. 28.",
"searchValue": "2025. 07. 26.",
"value": "1300",
"points": 1,
"category": "OneAnswer",
"item": "문구 (2025. 06. 28.)/① 크기 (1300)",
"item": "문구 (2025. 07. 26.)/① 크기 (1300)",
"desc": "1pt당 100"
},
"21": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
"searchValue": "2025. 06. 28.",
"searchValue": "2025. 07. 26.",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (2025. 06. 28.)/② 정렬 (가운데 정렬)"
"item": "문구 (2025. 07. 26.)/② 정렬 (가운데 정렬)"
},
"22": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "광진다문화체험관",
"value": "돋움체",
"searchValue": "중랑미디어센터",
"value": "굴림",
"points": 1,
"category": "FontName",
"item": "문구 (광진다문화체험관)/① 글씨체 (돋움체)"
"item": "문구 (중랑미디어센터)/① 글씨체 (굴림)"
},
"23": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "광진다문화체험관",
"value": "2400",
"searchValue": "중랑미디어센터",
"value": "2300",
"points": 1,
"category": "OneAnswer",
"item": "문구 (광진다문화체험관)/② 크기 (2400)"
"item": "문구 (중랑미디어센터)/② 크기 (2300)"
},
"24": {
"path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/ancestor::P/@ParaShape]/@Align",
"searchValue": "광진다문화체험관",
"searchValue": "중랑미디어센터",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (광진다문화체험관)/③ 정렬 (가운데 정렬)"
"item": "문구 (중랑미디어센터)/③ 정렬 (가운데 정렬)"
},
"25": {
"path": "//SECTION[1]//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "DIAT",
"value": "굴림",
"value": "중고딕",
"points": 1,
"category": "FontName",
"item": "문구 (DIAT)/① 글꼴 (굴림)"
"item": "문구 (DIAT)/① 글꼴 (중고딕)"
},
"26": {
"path": "//CHARSHAPE[@Id=//SECTION[1]//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
@@ -280,14 +280,15 @@
},
"28": {
"path": "//PAGENUM/@FormatType",
"value": "CircledDigit",
"value": "RomanCapital",
"points": 2,
"category": "PageNumber",
"item": "① 쪽 번호 매기기 (①,②,③ 순으로)",
"item": "① 쪽 번호 매기기 (가,나,다 순으로)",
"desc1": {
"가,나,다": "HangulSyllable",
"1,2,3": "Digit",
"갑,을,병": "DecagonCircle",
"甲,乙,丙": "DecagonCircleHanja",
"A,B,C": "LatinCapital",
"a,b,c": "LatinSmall",
"①,②,③": "CircledDigit",
@@ -296,7 +297,7 @@
"ⓐ,ⓑ,ⓒ": "CircledLatinSmall",
"i,ii,iii": "RomanSmall",
"I,II,III": "RomanCapital",
"甲,乙,丙": "DecagonCircleHanja",
"+,++,+++": "UserChar",
"desc": "정답에 맞는 값 value에 입력"
},
"desc2": "1, 2페이지 모두 정답이어야 점수 부여"
@@ -316,11 +317,11 @@
},
"30": {
"path": "//PARASHAPE[@Id='{parashape_id}']/PARAMARGIN/@LineSpacing",
"value": "200",
"first_word": "",
"value": "190",
"first_word": "",
"points": 2,
"category": "LineSpacing",
"item": "문제 1 줄간격 200% 설정",
"item": "문제 1 줄간격 190% 설정",
"desc": "1페이지 문단의 줄간격이 정답이 아닌 문단이 있으면 False(감점), first_word 속성에 [문단 첫글자 장식]에 해당하는 글자를 입력해준다."
}
},
@@ -353,104 +354,104 @@
},
"4": {
"path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Width",
"searchValue": "미소의 나라, 태국",
"value": "70",
"searchValue": "방송 콘텐츠",
"value": "60",
"points": 2,
"category": "mmSize",
"item": "문구 (미소의 나라, 태국)/① 크기-너비 (70 mm)"
"item": "문구 (방송 콘텐츠)/① 크기-너비 (60 mm)"
},
"5": {
"path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Height",
"searchValue": "미소의 나라, 태국",
"searchValue": "방송 콘텐츠",
"value": "12",
"points": 2,
"category": "mmSize",
"item": "문구 (미소의 나라, 태국)/② 크기-높이 (12 mm)"
"item": "문구 (방송 콘텐츠)/② 크기-높이 (12 mm)"
},
"6": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//LINESHAPE",
"searchValue": "미소의 나라, 태국",
"searchValue": "방송 콘텐츠",
"value": {
"Style": "DoubleSlim",
"Width": "283"
},
"points": 2,
"category": "LineShape",
"item": "문구 (미소의 나라, 태국)/③ 테두리 : 이중 실선(1.00mm)",
"item": "문구 (방송 콘텐츠)/③ 테두리 : 이중 실선(1.00mm)",
"desc": "1mm = 283pt value['Width']에 pt값 입력"
},
"7": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/@Ratio",
"searchValue": "미소의 나라, 태국",
"value": "50",
"searchValue": "방송 콘텐츠",
"value": "20",
"points": 2,
"category": "OneAnswer",
"item": "문구 (미소의 나라, 태국)/④ 글상자 모서리 (직각)",
"item": "문구 (방송 콘텐츠)/④ 글상자 모서리 (직각)",
"desc": "모서리 비율 반원:50 / 둥근모양:20 / 직각:0"
},
"8": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor",
"searchValue": "미소의 나라, 태국",
"value": "61,164,73",
"searchValue": "방송 콘텐츠",
"value": "227,220,193",
"points": 2,
"category": "Color",
"item": "문구 (미소의 나라, 태국)/⑤ 채우기 : 색상(RGB:61,164,73)"
"item": "문구 (방송 콘텐츠)/⑤ 채우기 : 색상(RGB:227,220,193)"
},
"9": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/POSITION/@TreatAsChar",
"searchValue": "미소의 나라, 태국",
"searchValue": "방송 콘텐츠",
"value": "true",
"points": 1,
"category": "OneAnswer",
"item": "문구 (미소의 나라, 태국)/⑥ 글상자 위치 (글자처럼 취급)"
"item": "문구 (방송 콘텐츠)/⑥ 글상자 위치 (글자처럼 취급)"
},
"10": {
"path": "//PARASHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::P[last()]/@ParaShape]/@Align",
"searchValue": "미소의 나라, 태국",
"searchValue": "방송 콘텐츠",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (미소의 나라, 태국)/⑦ 글상자 정렬 (가운데 정렬)"
"item": "문구 (방송 콘텐츠)/⑦ 글상자 정렬 (가운데 정렬)"
},
"11": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "미소의 나라, 태국",
"value": "굴림체",
"searchValue": "방송 콘텐츠",
"value": "견고딕",
"points": 1,
"category": "FontName",
"item": "문구 (미소의 나라, 태국)/⑧ 글씨체 (굴림체)"
"item": "문구 (방송 콘텐츠)/⑧ 글씨체 (견고딕)"
},
"12": {
"path": "//CHARSHAPE[@Id=//RECTANGLE//TEXT[./CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "미소의 나라, 태국",
"searchValue": "방송 콘텐츠",
"value": "2000",
"points": 1,
"category": "OneAnswer",
"item": "문구 (미소의 나라, 태국)/⑨ 글씨크기 (2000)",
"item": "문구 (방송 콘텐츠)/⑨ 글씨크기 (2000)",
"desc": "1pt당 100"
},
"13": {
"path": "//PARASHAPE[@Id=//RECTANGLE//P[.//CHAR[text()='{searchValue}']]/@ParaShape]/@Align",
"searchValue": "미소의 나라, 태국",
"searchValue": "방송 콘텐츠",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (미소의 나라, 태국)/⑩ 정렬 (가운데 정렬)"
"item": "문구 (방송 콘텐츠)/⑩ 정렬 (가운데 정렬)"
},
"14": {
"path": "//BINITEM[@BinData=//PICTURE/IMAGE/@BinItem][@Format='JPG']",
"value": true,
"points": 2,
"category": "Boolean",
"item": "① 파일명 \"그림D.jpg\" 삽입",
"item": "① 파일명 \"그림B.jpg\" 삽입",
"desc": "첨부 이미지 파일명 손상으로 정상적인 채점이 불가한 경우가 발견되어서 이미지 첨부 여부로 채점 방식 변경 (7/3)"
},
"15": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/SIZE/@Width",
"value": "85",
"value": "80",
"points": 2,
"category": "mmSize",
"item": "② 크기-너비 (85 mm)"
"item": "② 크기-너비 (80 mm)"
},
"16": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/SIZE/@Height",
@@ -468,87 +469,87 @@
},
"18": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@VertOffset",
"value": "22",
"value": "24",
"points": 2,
"category": "mmSize",
"item": "⑤ 위치 (어울림 : 세로-쪽의 위 22 mm)"
"item": "⑤ 위치 (어울림 : 세로-쪽의 위 24 mm)"
},
"19": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "1. 태국의 환경",
"value": "돋움",
"searchValue": "1. 최근 콘텐츠 동향",
"value": "돋움",
"points": 1,
"category": "FontName",
"item": "문구① (1. 태국의 환경)/① 글씨체 (돋움)"
"item": "문구① (1. 최근 콘텐츠 동향)/① 글씨체 (돋움)"
},
"20": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "1. 태국의 환경",
"searchValue": "1. 최근 콘텐츠 동향",
"value": "1200",
"points": 1,
"category": "OneAnswer",
"item": "문구① (1. 태국의 환경)/② 크기 (12pt)"
"item": "문구① (1. 최근 콘텐츠 동향)/② 크기 (12pt)"
},
"21": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"searchValue": "1. 태국의 환경",
"searchValue": "1. 최근 콘텐츠 동향",
"value": "BOLD",
"points": 1,
"category": "FontAttribute",
"item": "문구① (1. 태국의 환경)/③ 진하게"
"item": "문구① (1. 최근 콘텐츠 동향)/③ 진하게"
},
"22": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "2. 태국의 주요 도시",
"value": "돋움",
"searchValue": "2. OTT 서비스의 미래",
"value": "돋움",
"points": 1,
"category": "FontName",
"item": "문구② (2. 태국의 주요 도시)/① 글씨체 (돋움)"
"item": "문구② (2. OTT 서비스의 미래)/① 글씨체 (돋움)"
},
"23": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "2. 태국의 주요 도시",
"searchValue": "2. OTT 서비스의 미래",
"value": "1200",
"points": 1,
"category": "OneAnswer",
"item": "문구② (2. 태국의 주요 도시)/② 크기 (1200)"
"item": "문구② (2. OTT 서비스의 미래)/② 크기 (1200)"
},
"24": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"searchValue": "2. 태국의 주요 도시",
"searchValue": "2. OTT 서비스의 미래",
"value": "BOLD",
"points": 1,
"category": "FontAttribute",
"item": "문구② (2. 태국의 주요 도시)/③ 진하게"
"item": "문구② (2. OTT 서비스의 미래)/③ 진하게"
},
"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": "카오소이",
"option": "코로나",
"value": true,
"points": 2,
"category": "Boolean",
"item": "문구 (카오소이)/① 각주 설정 및 문구 입력"
"item": "문구 (코로나)/① 각주 설정 및 문구 입력"
},
"26": {
"path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape",
"searchValue": "커리와 면, 토핑으로 이루어진 태국의 전통 국수",
"value": "굴림",
"searchValue": "새로운 유형의 변종 코로나바이러스에 의해 발병한 급성 호흡기 전염병",
"value": "궁서",
"points": 1,
"category": "FontName",
"item": "문구 (카오소이)/② 글씨체 (굴림)"
"item": "문구 (코로나)/② 글씨체 (궁서)"
},
"27": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape]/@Height",
"searchValue": "커리와 면, 토핑으로 이루어진 태국의 전통 국수",
"searchValue": "새로운 유형의 변종 코로나바이러스에 의해 발병한 급성 호흡기 전염병",
"value": "900",
"points": 1,
"category": "OneAnswer",
"item": "문구 (카오소이)/③ 크기 (9pt)"
"item": "문구 (코로나)/③ 크기 (9pt)"
},
"28": {
"path": "//P[TEXT[CHAR[contains(text(), '{searchValue}')]]]//AUTONUMFORMAT/@Type",
"searchValue": "커리와 면, 토핑으로 이루어진 태국의 전통 국수",
"searchValue": "새로운 유형의 변종 코로나바이러스에 의해 발병한 급성 호흡기 전염병",
"value": "DecagonCircle",
"points": 2,
"category": "OneAnswer",
@@ -566,85 +567,86 @@
"i,ii,iii": "RomanSmall",
"I,II,III": "RomanCapital",
"甲,乙,丙": "DecagonCircleHanja",
"+,++,+++": "UserChar",
"정답에 맞는 값 value에 입력": ""
}
},
"29": {
"path": "boolean(//CHAR[contains(text(),'Temple')])",
"ignoreWord": "Temple",
"path": "boolean(//CHAR[contains(text(),'Streaming')])",
"ignoreWord": "Streaming",
"value": true,
"points": 3,
"category": "Boolean",
"item": "Temple/영단어 미입력, 대소문자/오타 시 전체 감점",
"item": "Streaming/영단어 미입력, 대소문자/오타 시 전체 감점",
"desc": "유사도 검사를 진행하지 않고 영단어가 모두 일치해야 하므로 xpath구문 내 단어도 수정필요"
},
"30": {
"path": "//CHAR[contains(text(),'{kor}')][contains(text(),'{chn}')]",
"word": [
["절벽", "絶壁"],
["산림", "山林"],
["서식", "棲息"],
["비옥", "肥沃"],
["매력", "魅力"]
["시청", "視聽"],
["송출", "送出"],
["취향", "趣向"],
["성장", "成長"],
["근절", "根絶"]
],
"value": 10,
"points": 10,
"category": "Hanja",
"item": "① 절벽(絶壁), ② 산림(山林), ③ 서식(棲息), ④ 비옥(肥沃), ⑤ 매력(魅力)"
"item": "① 시청(視聽), ② 송출(送出), ③ 취향(趣向), ④ 성장(成長), ⑤ 근절(根絶)"
},
"31": {
"path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'대성기후')])",
"path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'간에원하')])",
"value": true,
"points": 3,
"category": "Boolean",
"item": "문구 (…따뜻한 열대강 기후를 가진…)>'강' → '성' 글자바꿈"
"item": "문구 (…언제든지 원하는 원하는 시간에 순서로…) > '원하는' / '시간에' 순서바꿈"
},
"32": {
"path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'타낸표현')])",
"path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'수익구조')])",
"value": true,
"points": 3,
"category": "Boolean",
"item": "문구 (…특성을 가장 잘 표현이기도 나타낸 하다…)>'표현이기도 / 나타낸' 순서바꿈"
"item": "문구 (…이익구조가 열악하다.…) > '이' → '수' 글자바꿈"
},
"33": {
"path": "//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape",
"searchValue": "지역별 관광객 수(단위:만 명)",
"value": "맑은 고딕",
"searchValue": "동영상 플랫폼 이용률(%)",
"value": "굴림체",
"points": 1,
"category": "FontName",
"item": "제목 문구 (지역별 관광객 수(단위:만 명))/① 글씨체 (맑은 고딕)"
"item": "제목 문구 (동영상 플랫폼 이용률(%))/① 글씨체 (굴림체)"
},
"34": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "지역별 관광객 수(단위:만 명)",
"searchValue": "동영상 플랫폼 이용률(%)",
"value": "1200",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (지역별 관광객 수(단위:만 명))/② 크기 (1200)"
"item": "제목 문구 (동영상 플랫폼 이용률(%))/② 크기 (1200)"
},
"35": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"searchValue": "지역별 관광객 수(단위:만 명)",
"searchValue": "동영상 플랫폼 이용률(%)",
"value": "BOLD",
"points": 1,
"category": "FontAttribute",
"item": "제목 문구 (지역별 관광객 수(단위:만 명))/③ 진하게"
"item": "제목 문구 (동영상 플랫폼 이용률(%))/③ 진하게"
},
"36": {
"path": "//PARASHAPE[@Id=//P[.//CHAR[text()='{searchValue}']]/@ParaShape]/@Align",
"searchValue": "지역별 관광객 수(단위:만 명)",
"searchValue": "동영상 플랫폼 이용률(%)",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (지역별 관광객 수(단위:만 명))/④ 정렬 (가운데 정렬)"
"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": "144,231,53",
"value": "95,229,218",
"points": 2,
"category": "Color",
"item": "위쪽 제목 셀/① 색상(RGB:144,231,53)"
"item": "위쪽 제목 셀/① 색상(RGB:95,229,218)"
},
"38": {
"path": "//CHARSHAPE[@Id=//TABLE/ROW[1]/descendant::TEXT/@CharShape]",
@@ -673,19 +675,19 @@
"41": {
"path": "//TABLE//TEXT/@CharShape",
"path2": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
"value": "돋움",
"value": "궁서체",
"points": 1,
"category": "TableFontName",
"category_tmp": "FontName",
"item": "글자모양/① 글씨체 (돋움)",
"item": "글자모양/① 글씨체 (궁서체)",
"desc": "테이블 폰트명 문항은 테이블의 모든 셀이 정답폰트와 일치해야 함, 하나만 일치해도 정답으로 채점할 경우 category값을 FontName으로 변경"
},
"42": {
"path": "//CHARSHAPE[@Id=//TABLE//TEXT/@CharShape]/@Height",
"value": "1100",
"value": "1000",
"points": 1,
"category": "TableAnswer",
"item": "글자모양/② 크기 (1100)"
"item": "글자모양/② 크기 (1000)"
},
"43": {
"path": "//PARASHAPE[@Id=//TABLE/ROW//P/@ParaShape]/@Align",
@@ -696,7 +698,7 @@
},
"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",
"option": "AVG",
"value": true,
"points": 4,
"category": "Boolean",
@@ -705,11 +707,11 @@
},
"45": {
"chart_xpath": "",
"chart_type": "묶은로막대형",
"chart_type": "묶은로막대형",
"value": true,
"points": 2,
"category": "ChartType",
"item": "① 종류 (묶은로막대형)",
"item": "① 종류 (묶은로막대형)",
"desc": "chart_type을 입력받아 차트타입에 맞는 xml요소가 있는지 내부적으로 검사, chart_type만 한글로 입력해주면 된다. (공백무시)"
},
"46": {
@@ -744,36 +746,36 @@
},
"50": {
"chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r//a:ea/@typeface",
"searchValue": "지역별 관광객 수",
"value": "돋움",
"searchValue": "동영상 플랫폼 이용률",
"value": "굴림",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (지역별 관광객 수)/① 글씨체 (돋움)"
"item": "제목 문구 (동영상 플랫폼 이용률)/① 글씨체 (굴림)"
},
"51": {
"chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@sz",
"searchValue": "지역별 관광객 수",
"value": "1200",
"searchValue": "동영상 플랫폼 이용률",
"value": "1400",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (지역별 관광객 수)/② 크기 (1200)"
"item": "제목 문구 (동영상 플랫폼 이용률)/② 크기 (1400)"
},
"52": {
"chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@{option}",
"option": "b",
"searchValue": "지역별 관광객 수",
"searchValue": "동영상 플랫폼 이용률",
"value": "1",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (지역별 관광객 수)/③ 진하게",
"item": "제목 문구 (동영상 플랫폼 이용률)/③ 진하게",
"desc": "option값 - 기울임(Italic):i / 굵게(Bold):b"
},
"53": {
"chart_xpath": "//c:catAx/c:txPr//a:ea/@typeface",
"value": "굴림",
"value": "돋움체",
"points": 1,
"category": "ChartOneAnswer",
"item": "X축/① 글꼴 (굴림)"
"item": "X축/① 글꼴 (돋움체)"
},
"54": {
"chart_xpath": "//c:catAx/c:txPr//a:defRPr/@sz",
@@ -793,10 +795,10 @@
},
"56": {
"chart_xpath": "//c:valAx/c:txPr//a:ea/@typeface",
"value": "굴림",
"value": "돋움체",
"points": 1,
"category": "ChartOneAnswer",
"item": "Y축/① 글꼴 (굴림)"
"item": "Y축/① 글꼴 (돋움체)"
},
"57": {
"chart_xpath": "//c:valAx/c:txPr//a:defRPr/@sz",
@@ -816,10 +818,10 @@
},
"59": {
"chart_xpath": "//c:legend//a:ea/@typeface",
"value": "굴림",
"value": "돋움체",
"points": 1,
"category": "OneAnswer",
"item": "범례/① 글꼴 (굴림)"
"item": "범례/① 글꼴 (돋움체)"
},
"60": {
"chart_xpath": "//c:legend//a:defRPr/@sz",

View File

@@ -46,57 +46,57 @@
"1": {
"1": {
"path": "//TEXTART[@Text='{searchValue}']/TEXTARTSHAPE/@FontName",
"searchValue": "인공지능융합일자리박람회",
"value": "맑은고딕",
"searchValue": "물절약포스터대회",
"value": "고딕",
"points": 1,
"category": "OneAnswer",
"item": "문구 (인공지능융합일자리박람회)/① 글씨체 (맑은고딕)"
"item": "문구 (물절약포스터대회)/① 글씨체 (고딕)"
},
"2": {
"path": "//TEXTART[@Text='{searchValue}']/descendant::WINDOWBRUSH/@FaceColor",
"searchValue": "인공지능융합일자리박람회",
"value": "58,118,152",
"searchValue": "물절약포스터대회",
"value": "233,106,147",
"points": 2,
"category": "Color",
"item": "문구 (인공지능융합일자리박람회)/② 채우기 : 색상(RGB:58,118,152)"
"item": "문구 (물절약포스터대회)/② 채우기 : 색상(RGB:233,106,147)"
},
"3": {
"path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Width",
"searchValue": "인공지능융합일자리박람회",
"value": "130",
"searchValue": "물절약포스터대회",
"value": "120",
"tolerance": 1,
"points": 2,
"category": "mmSize",
"item": "문구 (인공지능융합일자리박람회)/③ 크기-너비 (130 mm)"
"item": "문구 (물절약포스터대회)/③ 크기-너비 (120 mm)"
},
"4": {
"path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Height",
"searchValue": "인공지능융합일자리박람회",
"searchValue": "물절약포스터대회",
"value": "20",
"tolerance": 1,
"points": 2,
"category": "mmSize",
"item": "문구 (인공지능융합일자리박람회)/④ 크기-높이 (20 mm)"
"item": "문구 (물절약포스터대회)/④ 크기-높이 (20 mm)"
},
"5": {
"path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/POSITION/@TreatAsChar",
"searchValue": "인공지능융합일자리박람회",
"searchValue": "물절약포스터대회",
"value": "true",
"points": 2,
"category": "OneAnswer",
"item": "문구 (인공지능융합일자리박람회)/⑤ 위치 (글자처럼 취급)"
"item": "문구 (물절약포스터대회)/⑤ 위치 (글자처럼 취급)"
},
"6": {
"path": "//PARASHAPE[@Id=//P[.//TEXTART[@Text='{searchValue}']]/@ParaShape]/@Align",
"searchValue": "인공지능융합일자리박람회",
"searchValue": "물절약포스터대회",
"value": "Center",
"points": 2,
"category": "OneAnswer",
"item": "문구 (인공지능융합일자리박람회)/⑥ 정렬 (가운데 정렬)"
"item": "문구 (물절약포스터대회)/⑥ 정렬 (가운데 정렬)"
},
"7": {
"path": "//TEXTART[@Text='{searchValue}']",
"searchValue": "인공지능융합일자리박람회",
"searchValue": "물절약포스터대회",
"value": true,
"points": 2,
"category": "Boolean",
@@ -104,7 +104,7 @@
},
"8": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/SIZE",
"searchValue": "",
"searchValue": "",
"value": {
"Height": 2800,
"Width": 2800
@@ -112,94 +112,94 @@
"tolerance": 200,
"points": 1,
"category": "TwoLineSize",
"item": "/① 모양 (2줄)"
"item": "/① 모양 (2줄)"
},
"9": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "",
"value": "굴림체",
"searchValue": "",
"value": "궁서체",
"points": 1,
"category": "FontName",
"item": "/② 글씨체 (굴림체)"
"item": "/② 글씨체 (궁서체)"
},
"10": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor",
"searchValue": "",
"value": "17,227,206",
"searchValue": "",
"value": "242,144,240",
"points": 2,
"category": "Color",
"item": "/③ 면색 : 색상(RGB:17,227,206)"
"item": "/③ 면색 : 색상(RGB:242,144,240)"
},
"11": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//OUTSIDEMARGIN/@Right",
"searchValue": "",
"searchValue": "",
"value": "3.0",
"tolerance": 1,
"points": 2,
"category": "mmSize",
"item": "/④ 본문과의 간격 : 3.0mm"
"item": "/④ 본문과의 간격 : 3.0mm"
},
"12": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]",
"searchValue": "구직자와 기업 간의 효과적인 매칭",
"searchValue": "소중한 물 절약 포스터",
"value": "BOLD",
"points": 2,
"category": "FontAttribute",
"item": "문구 (구직자와 기업 간의 효과적인 매칭)/① BOLD"
"item": "문구 (소중한 물 절약 포스터)/① BOLD"
},
"13": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]",
"searchValue": "구직자와 기업 간의 효과적인 매칭",
"searchValue": "소중한 물 절약 포스터",
"value": "ITALIC",
"points": 2,
"category": "FontAttribute",
"item": "문구 (구직자와 기업 간의 효과적인 매칭)/② ITALIC"
"item": "문구 (소중한 물 절약 포스터)/② ITALIC"
},
"14": {
"path": "//CHAR[contains(string(.),'{char1}')]/text()",
"path2": "//CHAR[contains(string(.),'{char2}')]/text()",
"path3": "//CHAR[contains(string(.),'{char3}')]/text()",
"char1": "",
"char2": "",
"char1": "",
"char2": "",
"char3": "※",
"value": 3,
"points": 3,
"category": "SpecialChar",
"item": "① , ② , ③ ※"
"item": "① , ② , ③ ※"
},
"15": {
"path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape",
"searchValue": "행사안내",
"value": "돋움",
"searchValue": "대회안내",
"value": "굴림체",
"points": 1,
"category": "FontName",
"item": "문구 (◈ 행사안내 )/① 글씨체 (돋움)"
"item": "문구 (♠ 대회안내 )/① 글씨체 (굴림체)"
},
"16": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{match_str}')]/ancestor::P/@ParaShape]/@Align",
"match_str": "행사안내",
"match_str": "대회안내",
"value": "Center",
"points": 1,
"category": "Align",
"item": "문구 (◈ 행사안내 )/② 정렬 (가운데 정렬)"
"item": "문구 (♠ 대회안내 )/② 정렬 (가운데 정렬)"
},
"17": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]",
"searchValue": "대전코엑스 3층 대강당",
"searchValue": "2025년 8월 16일(토) 10시 ~ 16시",
"value": "ITALIC",
"points": 1,
"category": "FontAttribute",
"item": "문구 (대전코엑스 3층 대강당)/① ITALIC"
"item": "문구 (2025년 8월 16일(토) 10시 ~ 16시)/① ITALIC"
},
"18": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"hyperlink_ptag": "//P[.//FIELDBEGIN[@Type='Hyperlink']]",
"searchValue": "대전코엑스 3층 대강당",
"searchValue": "2025년 8월 16일(토) 10시 ~ 16시",
"value": "UNDERLINE",
"points": 1,
"category": "FontAttribute",
"item": "문구 (대전코엑스 3층 대강당)/② UNDERLINE"
"item": "문구 (2025년 8월 16일(토) 10시 ~ 16시)/② UNDERLINE"
},
"19": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN",
@@ -210,57 +210,57 @@
},
"points": 2,
"category": "ParaShape",
"item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (10pt), 내어쓰기 (12pt)",
"item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (15pt), 내어쓰기 (12pt)",
"desc": "내부적으로 내어쓰기는 음수값 / JSON value값은 양수로 입력"
},
"20": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
"searchValue": "2025. 06. 28.",
"value": "1400",
"searchValue": "2025. 07. 26.",
"value": "1300",
"points": 1,
"category": "OneAnswer",
"item": "문구 (2025. 06. 28.)/① 크기 (1400)",
"item": "문구 (2025. 07. 26.)/① 크기 (1300)",
"desc": "1pt당 100"
},
"21": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
"searchValue": "2025. 06. 28.",
"searchValue": "2025. 07. 26.",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (2025. 06. 28.)/② 정렬 (가운데 정렬)"
"item": "문구 (2025. 07. 26.)/② 정렬 (가운데 정렬)"
},
"22": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "차세대융합일자리협회",
"value": "궁서체",
"searchValue": "코리아워터협회",
"value": "중고딕",
"points": 1,
"category": "FontName",
"item": "문구 (차세대융합일자리협회)/① 글씨체 (궁서체)"
"item": "문구 (코리아워터협회)/① 글씨체 (중고딕)"
},
"23": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "차세대융합일자리협회",
"value": "2300",
"searchValue": "코리아워터협회",
"value": "2400",
"points": 1,
"category": "OneAnswer",
"item": "문구 (차세대융합일자리협회)/② 크기 (2300)"
"item": "문구 (코리아워터협회)/② 크기 (2400)"
},
"24": {
"path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/ancestor::P/@ParaShape]/@Align",
"searchValue": "차세대융합일자리협회",
"searchValue": "코리아워터협회",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (차세대융합일자리협회)/③ 정렬 (가운데 정렬)"
"item": "문구 (코리아워터협회)/③ 정렬 (가운데 정렬)"
},
"25": {
"path": "//SECTION[1]//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "DIAT",
"value": "굴림",
"value": "궁서",
"points": 1,
"category": "FontName",
"item": "문구 (DIAT)/① 글꼴 (굴림)"
"item": "문구 (DIAT)/① 글꼴 (궁서)"
},
"26": {
"path": "//CHARSHAPE[@Id=//SECTION[1]//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
@@ -280,7 +280,7 @@
},
"28": {
"path": "//PAGENUM/@FormatType",
"value": "RomanSmall",
"value": "DecagonCircleHanja",
"points": 2,
"category": "PageNumber",
"item": "① 쪽 번호 매기기 (가,나,다 순으로)",
@@ -288,6 +288,7 @@
"가,나,다": "HangulSyllable",
"1,2,3": "Digit",
"갑,을,병": "DecagonCircle",
"甲,乙,丙": "DecagonCircleHanja",
"A,B,C": "LatinCapital",
"a,b,c": "LatinSmall",
"①,②,③": "CircledDigit",
@@ -296,7 +297,7 @@
"ⓐ,ⓑ,ⓒ": "CircledLatinSmall",
"i,ii,iii": "RomanSmall",
"I,II,III": "RomanCapital",
"甲,乙,丙": "DecagonCircleHanja",
"+,++,+++": "UserChar",
"desc": "정답에 맞는 값 value에 입력"
},
"desc2": "1, 2페이지 모두 정답이어야 점수 부여"
@@ -316,11 +317,11 @@
},
"30": {
"path": "//PARASHAPE[@Id='{parashape_id}']/PARAMARGIN/@LineSpacing",
"value": "180",
"first_word": "",
"value": "200",
"first_word": "",
"points": 2,
"category": "LineSpacing",
"item": "문제 1 줄간격 180% 설정",
"item": "문제 1 줄간격 200% 설정",
"desc": "1페이지 문단의 줄간격이 정답이 아닌 문단이 있으면 False(감점), first_word 속성에 [문단 첫글자 장식]에 해당하는 글자를 입력해준다."
}
},
@@ -353,89 +354,89 @@
},
"4": {
"path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Width",
"searchValue": "인공지능의 영향",
"value": "65",
"searchValue": "댐의 종류",
"value": "45",
"points": 2,
"category": "mmSize",
"item": "문구 (인공지능의 영향)/① 크기-너비 (65 mm)"
"item": "문구 (댐의 종류)/① 크기-너비 (45 mm)"
},
"5": {
"path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Height",
"searchValue": "인공지능의 영향",
"searchValue": "댐의 종류",
"value": "12",
"points": 2,
"category": "mmSize",
"item": "문구 (인공지능의 영향)/② 크기-높이 (12 mm)"
"item": "문구 (댐의 종류)/② 크기-높이 (12 mm)"
},
"6": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//LINESHAPE",
"searchValue": "인공지능의 영향",
"searchValue": "댐의 종류",
"value": {
"Style": "DoubleSlim",
"Width": "283"
},
"points": 2,
"category": "LineShape",
"item": "문구 (인공지능의 영향)/③ 테두리 : 이중 실선(1.00mm)",
"item": "문구 (댐의 종류)/③ 테두리 : 이중 실선(1.00mm)",
"desc": "1mm = 283pt value['Width']에 pt값 입력"
},
"7": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/@Ratio",
"searchValue": "인공지능의 영향",
"value": "0",
"searchValue": "댐의 종류",
"value": "50",
"points": 2,
"category": "OneAnswer",
"item": "문구 (인공지능의 영향)/④ 글상자 모서리 (직각)",
"item": "문구 (댐의 종류)/④ 글상자 모서리 (직각)",
"desc": "모서리 비율 반원:50 / 둥근모양:20 / 직각:0"
},
"8": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor",
"searchValue": "인공지능의 영향",
"value": "239,238,20",
"searchValue": "댐의 종류",
"value": "249,207,27",
"points": 2,
"category": "Color",
"item": "문구 (인공지능의 영향)/⑤ 채우기 : 색상(RGB:239,238,20)"
"item": "문구 (댐의 종류)/⑤ 채우기 : 색상(RGB:249,207,27)"
},
"9": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/POSITION/@TreatAsChar",
"searchValue": "인공지능의 영향",
"searchValue": "댐의 종류",
"value": "true",
"points": 1,
"category": "OneAnswer",
"item": "문구 (인공지능의 영향)/⑥ 글상자 위치 (글자처럼 취급)"
"item": "문구 (댐의 종류)/⑥ 글상자 위치 (글자처럼 취급)"
},
"10": {
"path": "//PARASHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::P[last()]/@ParaShape]/@Align",
"searchValue": "인공지능의 영향",
"searchValue": "댐의 종류",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (인공지능의 영향)/⑦ 글상자 정렬 (가운데 정렬)"
"item": "문구 (댐의 종류)/⑦ 글상자 정렬 (가운데 정렬)"
},
"11": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "인공지능의 영향",
"value": "돋움체",
"searchValue": "댐의 종류",
"value": "맑은 고딕",
"points": 1,
"category": "FontName",
"item": "문구 (인공지능의 영향)/⑧ 글씨체 (돋움체)"
"item": "문구 (댐의 종류)/⑧ 글씨체 (맑은 고딕)"
},
"12": {
"path": "//CHARSHAPE[@Id=//RECTANGLE//TEXT[./CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "인공지능의 영향",
"value": "2300",
"searchValue": "댐의 종류",
"value": "1800",
"points": 1,
"category": "OneAnswer",
"item": "문구 (인공지능의 영향)/⑨ 글씨크기 (2300)",
"item": "문구 (댐의 종류)/⑨ 글씨크기 (1800)",
"desc": "1pt당 100"
},
"13": {
"path": "//PARASHAPE[@Id=//RECTANGLE//P[.//CHAR[text()='{searchValue}']]/@ParaShape]/@Align",
"searchValue": "인공지능의 영향",
"searchValue": "댐의 종류",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (인공지능의 영향)/⑩ 정렬 (가운데 정렬)"
"item": "문구 (댐의 종류)/⑩ 정렬 (가운데 정렬)"
},
"14": {
"path": "//BINITEM[@BinData=//PICTURE/IMAGE/@BinItem][@Format='JPG']",
@@ -447,10 +448,10 @@
},
"15": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/SIZE/@Width",
"value": "85",
"value": "80",
"points": 2,
"category": "mmSize",
"item": "② 크기-너비 (85 mm)"
"item": "② 크기-너비 (80 mm)"
},
"16": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/SIZE/@Height",
@@ -468,93 +469,94 @@
},
"18": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@VertOffset",
"value": "22",
"value": "24",
"points": 2,
"category": "mmSize",
"item": "⑤ 위치 (어울림 : 세로-쪽의 위 22 mm)"
"item": "⑤ 위치 (어울림 : 세로-쪽의 위 24 mm)"
},
"19": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "1. 취업시장의 변화",
"value": "궁서",
"searchValue": "1. 댐의 기원",
"value": "돋움체",
"points": 1,
"category": "FontName",
"item": "문구① (1. 취업시장의 변화)/① 글씨체 (궁서)"
"item": "문구① (1. 댐의 기원)/① 글씨체 (돋움체)"
},
"20": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "1. 취업시장의 변화",
"searchValue": "1. 댐의 기원",
"value": "1200",
"points": 1,
"category": "OneAnswer",
"item": "문구① (1. 취업시장의 변화)/② 크기 (12pt)"
"item": "문구① (1. 댐의 기원)/② 크기 (12pt)"
},
"21": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"searchValue": "1. 취업시장의 변화",
"searchValue": "1. 댐의 기원",
"value": "BOLD",
"points": 1,
"category": "FontAttribute",
"item": "문구① (1. 취업시장의 변화)/③ 진하게"
"item": "문구① (1. 댐의 기원)/③ 진하게"
},
"22": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "2. 중장년층의 일자리",
"value": "궁서",
"searchValue": "2. 댐의 종류",
"value": "돋움체",
"points": 1,
"category": "FontName",
"item": "문구② (2. 중장년층의 일자리)/① 글씨체 (궁서)"
"item": "문구② (2. 댐의 종류)/① 글씨체 (돋움체)"
},
"23": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "2. 중장년층의 일자리",
"searchValue": "2. 댐의 종류",
"value": "1200",
"points": 1,
"category": "OneAnswer",
"item": "문구② (2. 중장년층의 일자리)/② 크기 (1200)"
"item": "문구② (2. 댐의 종류)/② 크기 (1200)"
},
"24": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"searchValue": "2. 중장년층의 일자리",
"searchValue": "2. 댐의 종류",
"value": "BOLD",
"points": 1,
"category": "FontAttribute",
"item": "문구② (2. 중장년층의 일자리)/③ 진하게"
"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": "디지털 리터러시",
"option": "수문",
"value": true,
"points": 2,
"category": "Boolean",
"item": "문구 (디지털 리터러시)/① 각주 설정 및 문구 입력"
"item": "문구 (수문)/① 각주 설정 및 문구 입력"
},
"26": {
"path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape",
"searchValue": "디지털 기술에 대한 이해와 활용 능력",
"searchValue": "저수지나 수로에 설치하여 수량을 조절하는 문",
"value": "굴림",
"points": 1,
"category": "FontName",
"item": "문구 (디지털 리터러시)/② 글씨체 (굴림)"
"item": "문구 (수문)/② 글씨체 (굴림)"
},
"27": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape]/@Height",
"searchValue": "디지털 기술에 대한 이해와 활용 능력",
"searchValue": "저수지나 수로에 설치하여 수량을 조절하는 문",
"value": "900",
"points": 1,
"category": "OneAnswer",
"item": "문구 (디지털 리터러시)/③ 크기 (9pt)"
"item": "문구 (수문)/③ 크기 (9pt)"
},
"28": {
"path": "//P[TEXT[CHAR[contains(text(), '{searchValue}')]]]//AUTONUMFORMAT/@Type",
"searchValue": "디지털 기술에 대한 이해와 활용 능력",
"value": "Digit",
"searchValue": "저수지나 수로에 설치하여 수량을 조절하는 문",
"value": "CircledLatinSmall",
"points": 2,
"category": "OneAnswer",
"item": "문구 (전당)/④ 각주 번호모양",
"desc": {
"가,나,다": "HangulSyllable",
"㉮,㉯,㉰": "CircledHangulSyllable",
"1,2,3": "Digit",
"갑,을,병": "DecagonCircle",
"A,B,C": "LatinCapital",
@@ -565,86 +567,87 @@
"ⓐ,ⓑ,ⓒ": "CircledLatinSmall",
"i,ii,iii": "RomanSmall",
"I,II,III": "RomanCapital",
"甲,乙,丙": "DecagonCircleHanja",
"甲,乙,丙": "DecagonCircleHanja",
"+,++,+++": "UserChar",
"정답에 맞는 값 value에 입력": ""
}
},
"29": {
"path": "boolean(//CHAR[contains(text(),'Cooperation')])",
"ignoreWord": "Cooperation",
"path": "boolean(//CHAR[contains(text(),'Landslide')])",
"ignoreWord": "Landslide",
"value": true,
"points": 3,
"category": "Boolean",
"item": "Cooperation/영단어 미입력, 대소문자/오타 시 전체 감점",
"item": "Landslide/영단어 미입력, 대소문자/오타 시 전체 감점",
"desc": "유사도 검사를 진행하지 않고 영단어가 모두 일치해야 하므로 xpath구문 내 단어도 수정필요"
},
"30": {
"path": "//CHAR[contains(text(),'{kor}')][contains(text(),'{chn}')]",
"word": [
["양상", "樣相"],
["확보", "確保"],
["불균형", "不均衡"],
["대체", "代替"],
["창출", "創出"]
["유적", "遺跡"],
["축조", "築造"],
["선구", "先驅"],
["획기적", "劃期的"],
["방류", "放流"]
],
"value": 10,
"points": 10,
"category": "Hanja",
"item": "① 양상(樣相), ② 확보(確保), ③ 불균형(不均衡), ④ 대체(代替), ⑤ 창출(創出)"
"item": "① 유적(遺跡), ② 축조(築造), ③ 선구(先驅), ④ 획기적(劃期的), ⑤ 방류(放流)"
},
"31": {
"path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'전통산업')])",
"path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'이와더불')])",
"value": true,
"points": 3,
"category": "Boolean",
"item": "문구 (…전손 산업과 신산업 간의…)>'' → '' 글자바꿈"
"item": "문구 (…이는 더불어…)>'' → '' 글자바꿈"
},
"32": {
"path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'간이연장')])",
"path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'향을미치')])",
"value": true,
"points": 3,
"category": "Boolean",
"item": "문구 (…경제활동 연장되면서 기간이 60세…)>'연장되면서 / 기간이' 순서바꿈"
"item": "문구 (…크게 미치지 영향을 않을 만큼…)>'미치지' / '영향을' 순서바꿈"
},
"33": {
"path": "//TEXT[CHAR[contains(text(),'{searchValue}')]]/@CharShape",
"searchValue": "연도별 구직률 현황(%)",
"value": "돋움체",
"searchValue": "국가별 연평균 강수량(단위:밀리미터)",
"value": "굴림체",
"points": 1,
"category": "FontName",
"item": "제목 문구 (연도별 구직률 현황(%))/① 글씨체 (돋움체)"
"item": "제목 문구 (국가별 연평균 강수량(단위:밀리미터))/① 글씨체 (굴림체)"
},
"34": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "연도별 구직률 현황(%)",
"value": "1200",
"searchValue": "국가별 연평균 강수량(단위:밀리미터)",
"value": "1100",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (연도별 구직률 현황(%))/② 크기 (1200)"
"item": "제목 문구 (국가별 연평균 강수량(단위:밀리미터))/② 크기 (1100)"
},
"35": {
"path": "//CHARSHAPE[@Id=//TEXT[CHAR[text()='{searchValue}']]/@CharShape]",
"searchValue": "연도별 구직률 현황(%)",
"searchValue": "국가별 연평균 강수량(단위:밀리미터)",
"value": "BOLD",
"points": 1,
"category": "FontAttribute",
"item": "제목 문구 (연도별 구직률 현황(%))/③ 진하게"
"item": "제목 문구 (국가별 연평균 강수량(단위:밀리미터))/③ 진하게"
},
"36": {
"path": "//PARASHAPE[@Id=//P[.//CHAR[text()='{searchValue}']]/@ParaShape]/@Align",
"searchValue": "연도별 구직률 현황(%)",
"searchValue": "국가별 연평균 강수량(단위:밀리미터)",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (연도별 구직률 현황(%))/④ 정렬 (가운데 정렬)"
"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": "229,183,242",
"value": "179,197,243",
"points": 2,
"category": "Color",
"item": "위쪽 제목 셀/① 색상(RGB:229,183,242)"
"item": "위쪽 제목 셀/① 색상(RGB:179,197,243)"
},
"38": {
"path": "//CHARSHAPE[@Id=//TABLE/ROW[1]/descendant::TEXT/@CharShape]",
@@ -673,11 +676,11 @@
"41": {
"path": "//TABLE//TEXT/@CharShape",
"path2": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
"value": "굴림체",
"value": "돋움",
"points": 1,
"category": "TableFontName",
"category_tmp": "FontName",
"item": "글자모양/① 글씨체 (굴림체)",
"item": "글자모양/① 글씨체 (돋움)",
"desc": "테이블 폰트명 문항은 테이블의 모든 셀이 정답폰트와 일치해야 함, 하나만 일치해도 정답으로 채점할 경우 category값을 FontName으로 변경"
},
"42": {
@@ -705,11 +708,11 @@
},
"45": {
"chart_xpath": "",
"chart_type": "꺾은선형",
"chart_type": "묶은 가로 막대형",
"value": true,
"points": 2,
"category": "ChartType",
"item": "① 종류 (꺾은선형)",
"item": "① 종류 (묶은 가로 막대형)",
"desc": "chart_type을 입력받아 차트타입에 맞는 xml요소가 있는지 내부적으로 검사, chart_type만 한글로 입력해주면 된다. (공백무시)"
},
"46": {
@@ -744,28 +747,28 @@
},
"50": {
"chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r//a:ea/@typeface",
"searchValue": "연도별 구직률 현황(%)",
"searchValue": "국가별 연평균 강수량",
"value": "궁서체",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (연도별 구직률 현황(%))/① 글씨체 (궁서체)"
"item": "제목 문구 (국가별 연평균 강수량)/① 글씨체 (궁서체)"
},
"51": {
"chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@sz",
"searchValue": "연도별 구직률 현황(%)",
"value": "1400",
"searchValue": "국가별 연평균 강수량",
"value": "1300",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (연도별 구직률 현황(%))/② 크기 (1400)"
"item": "제목 문구 (국가별 연평균 강수량)/② 크기 (1300)"
},
"52": {
"chart_xpath": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@{option}",
"option": "b",
"searchValue": "연도별 구직률 현황(%)",
"searchValue": "국가별 연평균 강수량",
"value": "1",
"points": 1,
"category": "OneAnswer",
"item": "제목 문구 (연도별 구직률 현황(%))/③ 진하게",
"item": "제목 문구 (국가별 연평균 강수량)/③ 진하게",
"desc": "option값 - 기울임(Italic):i / 굵게(Bold):b"
},
"53": {

View File

@@ -0,0 +1,844 @@
{
"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": "120",
"tolerance": 1,
"points": 2,
"category": "mmSize",
"item": "문구 (여름방학특집해양스포츠체험교실)/③ 크기-너비 (120 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": "249,230,188",
"points": 2,
"category": "Color",
"item": "여/③ 면색 : 색상(RGB:249,230,188)"
},
"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": 2,
"category": "FontAttribute",
"item": "문구 (시원한 바다와 함께하는 해양 스포츠 체험 교실)/① BOLD"
},
"13": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]",
"searchValue": "시원한 바다와 함께하는 해양 스포츠 체험 교실",
"value": "UNDERLINE",
"points": 2,
"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": 10,
"Indent": 12
},
"points": 2,
"category": "ParaShape",
"item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (10pt), 내어쓰기 (12pt)",
"desc": "내부적으로 내어쓰기는 음수값 / JSON value값은 양수로 입력"
},
"20": {
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
"searchValue": "2025. 07. 26.",
"value": "1400",
"points": 1,
"category": "OneAnswer",
"item": "문구 (2025. 07. 26.)/① 크기 (1400)",
"desc": "1pt당 100"
},
"21": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
"searchValue": "2025. 07. 26.",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (2025. 07. 26.)/② 정렬 (가운데 정렬)"
},
"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": "2600",
"points": 1,
"category": "OneAnswer",
"item": "문구 (해양스포츠홍보위원회)/② 크기 (2600)"
},
"24": {
"path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/ancestor::P/@ParaShape]/@Align",
"searchValue": "해양스포츠홍보위원회",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (해양스포츠홍보위원회)/③ 정렬 (가운데 정렬)"
},
"25": {
"path": "//SECTION[1]//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "DIAT",
"value": "굴림",
"points": 1,
"category": "FontName",
"item": "문구 (DIAT)/① 글꼴 (굴림)"
},
"26": {
"path": "//CHARSHAPE[@Id=//SECTION[1]//TEXT[CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "DIAT",
"value": "900",
"points": 1,
"category": "OneAnswer",
"item": "문구 (DIAT)/② 크기 (9pt)"
},
"27": {
"path": "//PARASHAPE[@Id=//SECTION[1]//CHAR[text()='{searchValue}']/parent::TEXT/parent::P/@ParaShape]/@Align",
"searchValue": "DIAT",
"value": "Right",
"points": 1,
"category": "OneAnswer",
"item": "문구 (DIAT)/③ 정렬 (오른쪽 정렬)"
},
"28": {
"path": "//PAGENUM/@FormatType",
"value": "CircledDigit",
"points": 2,
"category": "PageNumber",
"item": "① 쪽 번호 매기기 (①,②,③ 순으로)",
"desc1": {
"가,나,다": "HangulSyllable",
"1,2,3": "Digit",
"갑,을,병": "DecagonCircle",
"甲,乙,丙": "DecagonCircleHanja",
"A,B,C": "LatinCapital",
"a,b,c": "LatinSmall",
"①,②,③": "CircledDigit",
"一,二,三": "Ideograph",
"㉠,㉡,㉢": "CircledHangulJamo",
"ⓐ,ⓑ,ⓒ": "CircledLatinSmall",
"i,ii,iii": "RomanSmall",
"I,II,III": "RomanCapital",
"+,++,+++": "UserChar",
"desc": "정답에 맞는 값 value에 입력"
},
"desc2": "1, 2페이지 모두 정답이어야 점수 부여"
},
"29": {
"path": "//PAGENUM/@Pos",
"value": "BottomRight",
"points": 2,
"category": "PageNumber",
"item": "가운데 아래",
"desc": "1, 2페이지 모두 정답이어야 점수 부여",
"desc2": {
"가운데 아래": "BottomCenter",
"오른쪽 아래": "BottomRight",
"왼쪽 아래": "BottomLeft"
}
},
"30": {
"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//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Width",
"searchValue": "해양 스포츠의 세계",
"value": "60",
"points": 2,
"category": "mmSize",
"item": "문구 (해양 스포츠의 세계)/① 크기-너비 (60 mm)"
},
"5": {
"path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Height",
"searchValue": "해양 스포츠의 세계",
"value": "12",
"points": 2,
"category": "mmSize",
"item": "문구 (해양 스포츠의 세계)/② 크기-높이 (12 mm)"
},
"6": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//LINESHAPE",
"searchValue": "해양 스포츠의 세계",
"value": {
"Style": "DoubleSlim",
"Width": "283"
},
"points": 2,
"category": "LineShape",
"item": "문구 (해양 스포츠의 세계)/③ 테두리 : 이중 실선(1.00mm)",
"desc": "1mm = 283pt value['Width']에 pt값 입력"
},
"7": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/@Ratio",
"searchValue": "해양 스포츠의 세계",
"value": "20",
"points": 2,
"category": "OneAnswer",
"item": "문구 (해양 스포츠의 세계)/④ 글상자 모서리 (직각)",
"desc": "모서리 비율 반원:50 / 둥근모양:20 / 직각:0"
},
"8": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor",
"searchValue": "해양 스포츠의 세계",
"value": "248,231,130",
"points": 2,
"category": "Color",
"item": "문구 (해양 스포츠의 세계)/⑤ 채우기 : 색상(RGB:248,231,130)"
},
"9": {
"path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/POSITION/@TreatAsChar",
"searchValue": "해양 스포츠의 세계",
"value": "true",
"points": 1,
"category": "OneAnswer",
"item": "문구 (해양 스포츠의 세계)/⑥ 글상자 위치 (글자처럼 취급)"
},
"10": {
"path": "//PARASHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::P[last()]/@ParaShape]/@Align",
"searchValue": "해양 스포츠의 세계",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (해양 스포츠의 세계)/⑦ 글상자 정렬 (가운데 정렬)"
},
"11": {
"path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
"searchValue": "해양 스포츠의 세계",
"value": "궁서",
"points": 1,
"category": "FontName",
"item": "문구 (해양 스포츠의 세계)/⑧ 글씨체 (궁서)"
},
"12": {
"path": "//CHARSHAPE[@Id=//RECTANGLE//TEXT[./CHAR[text()='{searchValue}']]/@CharShape]/@Height",
"searchValue": "해양 스포츠의 세계",
"value": "1800",
"points": 1,
"category": "OneAnswer",
"item": "문구 (해양 스포츠의 세계)/⑨ 글씨크기 (1800)",
"desc": "1pt당 100"
},
"13": {
"path": "//PARASHAPE[@Id=//RECTANGLE//P[.//CHAR[text()='{searchValue}']]/@ParaShape]/@Align",
"searchValue": "해양 스포츠의 세계",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"item": "문구 (해양 스포츠의 세계)/⑩ 정렬 (가운데 정렬)"
},
"14": {
"path": "//BINITEM[@BinData=//PICTURE/IMAGE/@BinItem][@Format='JPG']",
"value": true,
"points": 2,
"category": "Boolean",
"item": "① 파일명 \"그림D.jpg\" 삽입",
"desc": "첨부 이미지 파일명 손상으로 정상적인 채점이 불가한 경우가 발견되어서 이미지 첨부 여부로 채점 방식 변경 (7/3)"
},
"15": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/SIZE/@Width",
"value": "85",
"points": 2,
"category": "mmSize",
"item": "② 크기-너비 (85 mm)"
},
"16": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/SIZE/@Height",
"value": "40",
"points": 2,
"category": "mmSize",
"item": "③ 크기-높이 (40 mm)"
},
"17": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true') and @HorzRelTo='Page']/@HorzOffset",
"value": "0",
"points": 2,
"category": "mmSize",
"item": "④ 위치 (어울림 : 가로-쪽의 왼쪽 0.0mm)"
},
"18": {
"path": "//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@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. 국립해양박물관)/② 크기 (12pt)"
},
"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": "CircledHangulSyllable",
"points": 2,
"category": "OneAnswer",
"item": "문구 (전당)/④ 각주 번호모양",
"desc": {
"가,나,다": "HangulSyllable",
"㉮,㉯,㉰": "CircledHangulSyllable",
"1,2,3": "Digit",
"갑,을,병": "DecagonCircle",
"A,B,C": "LatinCapital",
"a,b,c": "LatinSmall",
"①,②,③": "CircledDigit",
"一,二,三": "Ideograph",
"㉠,㉡,㉢": "CircledHangulJamo",
"ⓐ,ⓑ,ⓒ": "CircledLatinSmall",
"i,ii,iii": "RomanSmall",
"I,II,III": "RomanCapital",
"甲,乙,丙": "DecagonCircleHanja",
"+,++,+++": "UserChar",
"정답에 맞는 값 value에 입력": ""
}
},
"29": {
"path": "boolean(//CHAR[contains(text(),'Display')])",
"ignoreWord": "Display",
"value": true,
"points": 3,
"category": "Boolean",
"item": "Display/영단어 미입력, 대소문자/오타 시 전체 감점",
"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": "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,162,149",
"points": 2,
"category": "Color",
"item": "위쪽 제목 셀/① 색상(RGB:233,162,149)"
},
"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"
}
}
}