2025-06-20 17:47:47 +09:00
{
2025-06-30 17:04:10 +09:00
"4" : {
"1" : {
"type" : "canvas.Size" ,
"ele" : "//Document/Width/@value | //Document/Height/@value" ,
"value" : [ "650" , "350" ] ,
"point" : 5 ,
"desc" : "캔버스 사이즈 650*350"
} ,
"2" : {
"type" : "none" ,
"ele" : "" ,
"point" : 5 ,
"desc" : "자유 변형 문항은 채점 불가"
} ,
"3" : {
"type" : "layer.exists" ,
"ele" : "//Layer/Name/@value" ,
2026-02-12 16:26:20 +09:00
"value" : "Stone Age" ,
2025-06-30 17:04:10 +09:00
"point" : 5 ,
2026-02-12 16:26:20 +09:00
"desc" : "Stone Age 레이어가 있는지 여부 체크"
2025-06-30 17:04:10 +09:00
} ,
"4" : {
"type" : "layer.Effects" ,
"ele" : "//Layer[Name[@value='{search}']]/Effects/Item" ,
2026-02-12 16:26:20 +09:00
"search" : "Stone Age" ,
2025-06-30 17:04:10 +09:00
"value" : {
2026-01-26 18:00:40 +09:00
"name" : "선명하게" ,
2025-06-30 17:04:10 +09:00
"option" : {
2026-02-12 16:26:20 +09:00
"양" : "20"
2025-06-20 17:47:47 +09:00
}
2025-06-30 17:04:10 +09:00
} ,
"point" : 5 ,
"desc" : {
"흑백" : "강도" ,
"밝기/대비" : [ "밝기" , "대비" ] ,
"노출" : "노출" ,
"색조/채도" : [ "색조" , "채도" , "명도" ] ,
2025-12-30 17:00:48 +09:00
"감마" : [ "리프트" , "감마" , "게인" ] ,
2025-08-27 18:00:29 +09:00
"세피아" : [ "U" , "V" ] ,
2025-06-30 17:04:10 +09:00
"생동감" : "생동감"
}
} ,
"5" : {
"type" : "none" ,
"ele" : "" ,
"point" : 6 ,
"desc" : "올가미 도구/이미지 문항은 채점 불가"
} ,
"6" : {
"type" : "exists" ,
"ele" : "//Layer/Effects/Item/Name/@value" ,
2026-01-26 18:00:40 +09:00
"value" : "세피아" ,
2025-06-30 17:04:10 +09:00
"point" : 6 ,
2026-01-26 18:00:40 +09:00
"desc" : "세피아 효과가 있는지 여부 체크"
2025-06-30 17:04:10 +09:00
} ,
"7" : {
"type" : "exists" ,
"ele" : "//Layer/Shapes/Shape/shape_type/@value" ,
2025-10-28 16:14:12 +09:00
"value" : "RECTANGLE" ,
2025-06-30 17:04:10 +09:00
"point" : 3 ,
2025-12-30 17:00:48 +09:00
"desc" : {
"사각형" : "RECTANGLE" ,
"모서리가 둥근 사각형" : "ROUNDED_RECTANGLE" ,
"원형/타원형" : "ELLIPSE"
}
2025-06-30 17:04:10 +09:00
} ,
"8" : {
"type" : "shape.size" ,
"ele" : "//Layer//op_points" ,
"value" : {
2026-02-12 16:26:20 +09:00
"width" : 650 ,
"height" : 100
2025-06-30 17:04:10 +09:00
} ,
"point" : 3 ,
"desc" : "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
} ,
"9" : {
"type" : "shape.color" ,
"ele" : "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value" ,
2026-02-12 16:26:20 +09:00
"value" : "823693" ,
2025-06-30 17:04:10 +09:00
"point" : 6 ,
"desc" : ""
} ,
"10" : {
"type" : "layer.blend.opacity" ,
"ele" : "//Layer" ,
"value" : {
2026-01-26 18:00:40 +09:00
"BlendOp" : "중첩" ,
"Opacity" : "65"
2025-06-30 17:04:10 +09:00
} ,
"point" : 6
} ,
"11" : {
"type" : "none" ,
"ele" : "" ,
"point" : 0 ,
"desc" : "기본설정"
} ,
"12" : {
"type" : "none" ,
"ele" : "" ,
"point" : 0 ,
"desc" : "파일명 확인"
}
} ,
"5" : {
"1" : {
"type" : "canvas.Size" ,
"ele" : "//Document/Width/@value | //Document/Height/@value" ,
"value" : [ "650" , "450" ] ,
"point" : 5 ,
"desc" : "캔버스 사이즈 650*450"
} ,
"2" : {
"type" : "none" ,
"ele" : "" ,
"point" : 5 ,
"desc" : "배경색 문항은 채점 불가"
} ,
"3" : {
"type" : "exists" ,
"ele" : "//Layer/MaskOpType/@value" ,
"value" : "Layering" ,
"point" : 6 ,
"desc" : "레이어 마스크 설정 확인"
} ,
"4" : {
"type" : "none" ,
"ele" : "" ,
"point" : 6 ,
"desc" : "가로방향 흐릿하게 문항은 채점 불가"
} ,
"5" : {
"type" : "exists" ,
"ele" : "//Layer//shape_type/@value" ,
2026-01-26 18:00:40 +09:00
"value" : "ROUNDED_RECTANGLE" ,
2025-10-28 16:14:12 +09:00
"point" : 3 ,
2026-02-12 16:26:20 +09:00
"desc" : {
2025-10-28 16:14:12 +09:00
"사각형" : "RECTANGLE" ,
"모서리가 둥근 사각형" : "ROUNDED_RECTANGLE" ,
"원형/타원형" : "ELLIPSE"
}
2025-06-30 17:04:10 +09:00
} ,
"6" : {
"type" : "shape.size" ,
"ele" : "//Layer//op_points" ,
"value" : {
2026-02-12 16:26:20 +09:00
"width" : 420 ,
2026-01-26 18:00:40 +09:00
"height" : 70
2025-06-30 17:04:10 +09:00
} ,
"point" : 3 ,
"desc" : "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
} ,
"7" : {
"type" : "gradient.color" ,
"ele" : "//Layer/Shapes/Shape" ,
"startColor" : "gradient_start_color/@value" ,
"endColor" : "gradient_end_color/@value" ,
"value" : {
2026-02-12 16:26:20 +09:00
"startColor" : "491C1C" ,
"endColor" : "FFFFFF"
2025-06-30 17:04:10 +09:00
} ,
"point" : 6
} ,
"8" : {
"type" : "text.exists" ,
"ele" : "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value" ,
2026-02-12 16:26:20 +09:00
"value" : "석기시대 문화" ,
2025-06-30 17:04:10 +09:00
"point" : 5
} ,
"9" : {
"type" : "exists" ,
"ele" : "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value" ,
2026-02-12 16:26:20 +09:00
"value" : "궁서체" ,
2025-06-30 17:04:10 +09:00
"point" : 3
} ,
"10" : {
"type" : "exists" ,
"ele" : "//Layer//Shape[shape_type/@value='TEXT']/font/{style}/@value" ,
2026-01-26 18:00:40 +09:00
"style" : "Italic" ,
2025-06-30 17:04:10 +09:00
"value" : "True" ,
"point" : 3
} ,
"11" : {
"type" : "exists" ,
"ele" : "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value" ,
2026-02-12 16:26:20 +09:00
"value" : "36" ,
2025-06-30 17:04:10 +09:00
"point" : 3
} ,
"12" : {
"type" : "text.color" ,
"ele" : "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value" ,
2026-02-12 16:26:20 +09:00
"value" : "FF9C65" ,
2025-06-30 17:04:10 +09:00
"point" : 3
} ,
"13" : {
"type" : "exists" ,
"ele" : "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value" ,
2026-02-12 16:26:20 +09:00
"value" : "5" ,
2025-06-30 17:04:10 +09:00
"point" : 3
} ,
"14" : {
"type" : "text.color" ,
"ele" : "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value" ,
2026-02-12 16:26:20 +09:00
"value" : "3D3939" ,
2025-06-30 17:04:10 +09:00
"point" : 3
} ,
"15" : {
2025-10-28 16:14:12 +09:00
"type" : "clippingMask.exists" ,
2025-06-30 17:04:10 +09:00
"ele" : "//Layer/MaskOpType/@value" ,
"value" : "Clipping" ,
"point" : 6 ,
"desc" : "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함"
} ,
"16" : {
"type" : "exists" ,
"ele" : "//Layer/Shapes/Shape/shape_type/@value" ,
2026-02-12 16:26:20 +09:00
"value" : "ELLIPSE" ,
2025-06-30 17:04:10 +09:00
"point" : 3 ,
"desc" : {
2025-10-28 16:14:12 +09:00
"사각형" : "RECTANGLE" ,
"모서리가 둥근 사각형" : "ROUNDED_RECTANGLE" ,
"원형/타원형" : "ELLIPSE"
2025-11-28 17:22:13 +09:00
} ,
"desc2" : "16번 문항의 value값을 17~20번 문항의 option값으로 사용"
2025-06-30 17:04:10 +09:00
} ,
"17" : {
"type" : "clipping.size" ,
"ele" : "//Layer//Shape[shape_type/@value='{option}']//op_points" ,
2026-02-12 16:26:20 +09:00
"option" : "ELLIPSE" ,
2025-06-30 17:04:10 +09:00
"value" : {
2026-02-12 16:26:20 +09:00
"width" : 160 ,
"height" : 160
2025-06-30 17:04:10 +09:00
} ,
"point" : 3 ,
"desc" : "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
} ,
"18" : {
"type" : "exists" ,
"ele" : "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value" ,
2026-02-12 16:26:20 +09:00
"option" : "ELLIPSE" ,
"value" : "3" ,
2025-06-30 17:04:10 +09:00
"point" : 3
} ,
"19" : {
"type" : "clipping.color" ,
"ele" : "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value" ,
2026-02-12 16:26:20 +09:00
"ele2" : "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value,'Outline')]/primary_color/@value|//Layer//Shape[shape_type/@value='{option}'and contains draw_type/@value,'Outline')]/secondary_color/@value" ,
"option" : "ELLIPSE" ,
"value" : "FF64F9" ,
2025-06-30 17:04:10 +09:00
"point" : 3 ,
"desc" : "채우기:secondary_color, 외곽선:primary_color"
} ,
"20" : {
"type" : "shadow" ,
"ele" : "//Layer//Shape[shape_type/@value='{option}']" ,
2026-02-12 16:26:20 +09:00
"option" : "ELLIPSE" ,
2025-06-30 17:04:10 +09:00
"value" : {
"shadow" : true ,
2026-01-26 18:00:40 +09:00
"width" : "10" ,
"distance" : "15" ,
"blur" : "10" ,
2026-02-12 16:26:20 +09:00
"angle" : "350"
2025-06-30 17:04:10 +09:00
} ,
"point" : 5 ,
"desc" : "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점"
} ,
"21" : {
"type" : "none" ,
"ele" : "" ,
"point" : 0 ,
"desc" : "기본설정"
} ,
"22" : {
"type" : "none" ,
"ele" : "" ,
"point" : 0 ,
"desc" : "파일명 확인"
2025-06-20 17:47:47 +09:00
}
2026-02-12 16:26:20 +09:00
} ,
"2" : {
"1" : {
"ele" : "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex" ,
"type" : "mediaOrder" ,
"value" : [ "동영상.mp4" , "이미지3.jpg" , "이미지2.jpg" , "이미지1.jpg" ] ,
"point" : 4 ,
"desc" : "비디오1 트랙에 있는 클립의 ClipIndex값을 기준으로 CRClipArr에서 Path값을 가져와서 정답 채점, 클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다."
} ,
"2" : {
"ele" : "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed" ,
"type" : "oneAnswer" ,
"value" : {
"speed" : "130"
} ,
"point" : 2 ,
"desc" : "100당 1배속 / 130 = 1.3배속"
} ,
"3" : {
"ele" : "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']" ,
"type" : "startEnd" ,
"media" : "동영상.mp4" ,
"value" : {
"start" : "0" ,
"end" : "340"
} ,
"point" : 2 ,
"desc" : "시작시간과 재생시간 정답값 입력, 3번문항은 '동영상.mp4' 클립의 길이를 확인하는 문항이므로 media는 수정할 필요가 없다."
} ,
"4" : {
"ele" : "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter" ,
"type" : "effect" ,
"media" : "동영상.mp4" ,
"value" : {
"ID" : "44" ,
"VID100" : "12" ,
"VID103" : "0.89999998"
} ,
"point" : 3 ,
"desc" : "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요"
} ,
"5" : {
"ele" : "//CROwneUnit[{index}]/CRCUnitArr/@Name" ,
"search" : "석기시대의 생활" ,
"type" : "video.Text" ,
"value" : "석기시대의 생활" ,
"point" : 3
} ,
"6" : {
"ele" : "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102" ,
"search" : "석기시대의 생활" ,
"type" : "video.Text" ,
"value" : "돋움체" ,
"point" : 2
} ,
"7" : {
"ele" : "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101" ,
"search" : "석기시대의 생활" ,
"type" : "video.Text" ,
"value" : "130" ,
"point" : 2
} ,
"8" : {
"ele" : "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100" ,
"search" : "석기시대의 생활" ,
"type" : "video.Text.Color" ,
"value" : "84f767" ,
"point" : 2 ,
"desc" : "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
} ,
"9" : {
"ele" : "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']" ,
"search" : "석기시대의 생활" ,
"type" : "video.Location" ,
"value" : [ "0.63125002" , "0.91481483" ] ,
"point" : 2 ,
"desc" : [
"정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다" ,
"CRCUnitArr의 VID600이 X좌표, VID601이 Y좌표"
]
} ,
"10" : {
"ele" : "" ,
"search" : "석기시대의 생활" ,
"type" : "video.StartTime" ,
"value" : 170 ,
"point" : 2 ,
"desc" : "내부적으로 자막의 시작시간과 길이를 계산"
} ,
"11" : {
"ele" : "" ,
"search" : "석기시대의 생활" ,
"type" : "video.Length" ,
"value" : 120 ,
"point" : 2 ,
"desc" : "내부적으로 자막의 시작시간과 길이를 계산"
} ,
"12" : {
"ele" : "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Mute" ,
"type" : "Mute" ,
"media" : "동영상.mp4" ,
"value" : "1" ,
"point" : 2
} ,
"13" : {
"ele" : "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length" ,
"type" : "imageLength" ,
"media" : "이미지3.jpg" ,
"value" : 180 ,
"point" : 2
} ,
"14" : {
"ele" : "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter" ,
"type" : "imageOverlay" ,
"media" : "이미지3.jpg" ,
"value" : {
"ID" : "103" ,
"VID103" : "5"
} ,
"point" : 2 ,
"desc" : "오버레이 속성 키값(VID10X) 확인하고 변경"
} ,
"15" : {
"ele" : "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']" ,
"type" : "clipTransition" ,
"media" : "이미지3.jpg" ,
"value" : {
"ID" : "21" ,
"Range" : "460:520" ,
"Type" : "2"
} ,
"point" : 2 ,
"desc" : "오버랩일 경우 Type속성값 16으로 변경"
} ,
"16" : {
"ele" : "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length" ,
"type" : "imageLength" ,
"media" : "이미지2.jpg" ,
"value" : 150 ,
"point" : 2
} ,
"17" : {
"ele" : "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter" ,
"type" : "imageOverlay" ,
"media" : "이미지2.jpg" ,
"value" : {
"ID" : "128" ,
"VID101" : "2"
} ,
"point" : 2 ,
"desc" : "오버레이 속성 키값(VID10X) 확인하고 변경"
} ,
"18" : {
"ele" : "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']" ,
"type" : "clipTransition" ,
"media" : "이미지2.jpg" ,
"value" : {
"ID" : "59" ,
"Range" : "640:670" ,
"Type" : "2"
} ,
"point" : 2 ,
"desc" : "오버랩일 경우 Type속성값 16으로 변경"
} ,
"19" : {
"ele" : "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length" ,
"type" : "imageLength" ,
"media" : "이미지1.jpg" ,
"value" : 150 ,
"point" : 2
} ,
"20" : {
"ele" : "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter" ,
"type" : "imageOverlay" ,
"media" : "이미지1.jpg" ,
"value" : {
"ID" : "184" ,
"VID100" : "20"
} ,
"point" : 2 ,
"desc" : "오버레이 속성 키값(VID10X) 확인하고 변경"
} ,
"21" : {
"ele" : "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']" ,
"type" : "clipTransition" ,
"media" : "이미지1.jpg" ,
"value" : {
"ID" : "24" ,
"Range" : "790:820" ,
"Type" : "2"
} ,
"point" : 2 ,
"desc" : "오버랩일 경우 Type속성값 16으로 변경"
} ,
"22" : {
"ele" : "//CROwneUnit[{index}]/CRCUnitArr/@Name" ,
"search" : "돌로 만든 도구 (Stone Tools)" ,
"type" : "video.Text" ,
"value" : "돌로 만든 도구 (Stone Tools)" ,
"point" : 3
} ,
"23" : {
"ele" : "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102" ,
"search" : "돌로 만든 도구 (Stone Tools)" ,
"type" : "video.Text" ,
"value" : "궁서체" ,
"point" : 2
} ,
"24" : {
"ele" : "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101" ,
"search" : "돌로 만든 도구 (Stone Tools)" ,
"type" : "video.Text" ,
"value" : "150" ,
"point" : 2
} ,
"25" : {
"ele" : "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100" ,
"search" : "돌로 만든 도구 (Stone Tools)" ,
"type" : "video.Text.Color" ,
"value" : "c31ddf" ,
"point" : 2 ,
"desc" : "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
} ,
"26" : {
"ele" : "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']" ,
"search" : "돌로 만든 도구 (Stone Tools)" ,
"type" : "video.Text.Outline" ,
"value" : {
"width" : "25" ,
"color" : "e6cfcf"
} ,
"point" : 2 ,
"desc" : "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성"
} ,
"27" : {
"ele" : "//CROwneUnit[{index}]/CRCUnitArr" ,
"search" : "돌로 만든 도구 (Stone Tools)" ,
"type" : "opening.Text.FadeInEffect" ,
"value" : {
"VID505" : "28" ,
"VID507" : "2"
} ,
"point" : 3 ,
"desc" : "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다."
} ,
"28" : {
"ele" : "" ,
"search" : "돌로 만든 도구 (Stone Tools)" ,
"type" : "opening.StartTime" ,
"value" : 0 ,
"point" : 2 ,
"desc" : "오프닝자막의 시작시간 value 속성만 수정"
} ,
"29" : {
"ele" : "" ,
"search" : "돌로 만든 도구 (Stone Tools)" ,
"type" : "opening.Length" ,
"value" : 120 ,
"point" : 2
} ,
"30" : {
"ele" : "" ,
"type" : "audio.StartTime" ,
"media" : "음악.mp3" ,
"value" : 0 ,
"point" : 2
} ,
"31" : {
"ele" : "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']" ,
"type" : "audio.EndTime" ,
"media" : "음악.mp3" ,
"value" : 810 ,
"point" : 2
} ,
"32" : {
"ele" : "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter" ,
"type" : "audio.Effect" ,
"media" : "음악.mp3" ,
"value" : {
"ID" : "1" ,
"Duration" : "90"
} ,
"point" : 2 ,
"desc" : "ID속성-페이드인:0 / 페이드아웃: 1"
} ,
"33" : {
"ele" : "none" ,
"point" : 0 ,
"desc" : "파일명 확인"
}
2025-06-30 17:04:10 +09:00
}
}