From 257df29eee5d10e201861e43075a0562a146c121 Mon Sep 17 00:00:00 2001 From: dragdra Date: Fri, 21 Mar 2025 17:26:51 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B3=B0=EB=AF=B9=EC=8A=A4=20=EC=9E=90?= =?UTF-8?q?=EB=A7=89(3-10)(3-11)=20=EC=9E=90=EB=A7=89=ED=85=8D=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EB=A1=9C=20ClipIndex=20=EA=B0=92=20=EA=B5=AC=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 250321_DIC_2502A_TEST.xlsx | Bin 0 -> 22499 bytes DIC_2502A.json | 13 +- DIC_2502B.json | 9 +- DIC_2502C.json | 9 +- DIC_2502D.json | 9 +- findSimilarString.js | 7 +- gpdpScoring.js | 2 +- psdExport_2.js | 44 +- z.xbook | 2 +- .../0320_DIC_채점기준표_Clipping.json | 561 ------------------ .../json_채점기준표/0320_DIC_채점기준표_Layer.json | 558 ----------------- 11 files changed, 56 insertions(+), 1158 deletions(-) create mode 100644 250321_DIC_2502A_TEST.xlsx delete mode 100644 회차별채점자료/2502/json_채점기준표/0320_DIC_채점기준표_Clipping.json delete mode 100644 회차별채점자료/2502/json_채점기준표/0320_DIC_채점기준표_Layer.json diff --git a/250321_DIC_2502A_TEST.xlsx b/250321_DIC_2502A_TEST.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..637ebbf3fe7ed244ed0370e84445056946a12bcd GIT binary patch literal 22499 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 highestSimilarity && similarity >= threshold) { highestSimilarity = similarity; bestMatch = text; } }); - return bestMatch; } diff --git a/gpdpScoring.js b/gpdpScoring.js index be62a27..1f5d7f4 100644 --- a/gpdpScoring.js +++ b/gpdpScoring.js @@ -223,7 +223,7 @@ function getGpdpScore(gpdpData, scoringJson, index) { } if(distance.length !== 0 && distance[0].value == rightAnswer["distance"]){ shadowScore += 1; - console.log('distence matched'); + console.log('distance matched'); } if(blur.length !== 0 && blur[0].value == rightAnswer["blur"]){ shadowScore += 1; diff --git a/psdExport_2.js b/psdExport_2.js index bb13c11..75bf232 100644 --- a/psdExport_2.js +++ b/psdExport_2.js @@ -160,9 +160,7 @@ console.log('채점 결과가 ' + outputExcelFile + ' 파일에 저장되었습 /** * 자막 태그의 인덱스를 구할 때 사용 * 1. CRTrackClip 요소의 순서에 따라 그 요소에 해당하는 CROwneUnit 태그의 순서를 구함 - * 2. CRTrackClip 요소의 시작시간에 따라 그 요소에 해당하는 CROwneUnit 태그의 순서를 구함 - * @returns video index - * + * 2. CRTrackClip 요소의 시작시간에 따라 그 요소에 해당하는 CROwneUnit 태그의 순서를 구함 */ function getTrackClipNode(xmlDoc, type, videoStartTime, openingStartTime) { let trackClipNode = null; @@ -175,9 +173,30 @@ function getTrackClipNode(xmlDoc, type, videoStartTime, openingStartTime) { const trackClipNode1 = xpath.select1(`//CRTrackList[@Name="텍스트"]/CRTrackClip[not(@ClipIndex='-1')][${subtitleOrder}]`, xmlDoc); const trackClipNode2 = xpath.select1(`//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = ${startTime}]`, xmlDoc); + return trackClipNode = trackClipNode1 ?? trackClipNode2; } +/** + * 자막텍스트를 이용해 자막 태그의 인덱스를 구할 때 사용 + * 1. 자막 텍스트의 유사도를 판별 + * 2. 자막텍스트와 일치하는 자막요소(CROWneUnit)의 순서를 구함 + */ +function getClipIndexBySubtitle(xmlDoc, search) { + // 1. search값이 일치하지 않는 경우 : count가 0이 되어 @ClipIndex = 0 / CROwneUnit[1]을 가리킴 [오류] + // 2. search값이 일치하는 경우 + // 1) search값이 CROwneUnit[1]이면 : preceding-sibling::CROwneUnit이 없어서 @ClipIndex = 0 / CROwneUnit[1]을 가리킴 [정상] + // 2) search값이 CROwneUnit[2]이면 : preceding-sibling::CROwneUnit이 한개 있으므로 @ClipIndex = 1 / CROwneUnit[2]을 가리킴 [정상] ... + if (!search) { + return null; + } + const searchResult = search ? findSimilarString(xmlDoc, search, 0.8) : null; + const crowneUnitPreceding = searchResult ? xpath.select(`//CROwneUnit[CRCUnitArr[@Name='${searchResult}']]/preceding-sibling::CROwneUnit`, xmlDoc) : null; + + const clipIndex = crowneUnitPreceding ? crowneUnitPreceding.length : null; + return clipIndex; +} + // xml 형식의 gmep 파일을 읽어서 점수를 계산 // scoring.json 파일 내에 있는 ele 요소는 xpath 형식으로 접근하여 요소를 탐색하고 나오는 값을 value와 비교하여 점수를 계산 // scoring.json 파일 내에 있는 type은 비교할 값의 타입을 의미하며, boolean, array 등이 있음 @@ -206,19 +225,20 @@ function getGmepScore(gmepData, scoringJson, index) { const videoStartTime = scoringData.videoStartTime; const openingStartTime = scoringData.openingStartTime; + console.log(`example number: ${key}`) + // xpath 전처리 const trackClipNode = getTrackClipNode(gmepXmlDoc, type, videoStartTime, openingStartTime); const subtitleIndex = trackClipNode ? parseInt(trackClipNode.getAttribute('ClipIndex'), 10) + 1 : null; + const clipIndex = getClipIndexBySubtitle(gmepXmlDoc, search); const subtitleOrder = type === 'video' ? 2 : type === 'opening' ? 1 : null; const startTime = type === 'video' ? videoStartTime : type === 'opening' ? openingStartTime : null; - [ele, ele2] = [ele, ele2].map(e => e?.replace(/{subtitleIndex}/g, subtitleIndex)); - [ele, ele2] = [ele, ele2].map(e => e?.replace(/{subtitleOrder}/g, subtitleOrder)); - [ele, ele2] = [ele, ele2].map(e => e?.replace(/{startTime}/g, startTime)); - - console.log("🚀 ~ getGmepScore ~ ele:", ele) - console.log("🚀 ~ getGmepScore ~ ele2:", ele2) + [ele, ele2, ele3] = [ele, ele2, ele3].map(e => e?.replace(/{subtitleIndex}/g, subtitleIndex)); + [ele, ele2, ele3] = [ele, ele2, ele3].map(e => e?.replace(/{subtitleOrder}/g, subtitleOrder)); + [ele, ele2, ele3] = [ele, ele2, ele3].map(e => e?.replace(/{startTime}/g, startTime)); + [ele, ele2, ele3] = [ele, ele2, ele3].map(e => e?.replace(/{clipIndex}/g, clipIndex)); // search 값이 undefined 아니면 ele의 {search}부분을 search로 치환 /** @@ -239,8 +259,10 @@ function getGmepScore(gmepData, scoringJson, index) { = [ele, ele2, ele3].map(e => e?.includes('{search}') ? null : e); } } - - console.log(`example number: ${key}`) + + console.log("🚀 ~ getGmepScore ~ ele:", ele) + console.log("🚀 ~ getGmepScore ~ ele2:", ele2) + console.log("🚀 ~ getGmepScore ~ ele3:", ele3) // xpath if (ele === 'none') { diff --git a/z.xbook b/z.xbook index f4e87fe..8f91250 100644 --- a/z.xbook +++ b/z.xbook @@ -1 +1 @@ -[{"kind":2,"language":"xpath","value":"//CROwneUnit[position() = (//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = 170]/@ClipIndex) + 1]/CRCUnitArr/@VID600 | //CROwneUnit[position() = (//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = 170]/@ClipIndex) + 1]/CRCUnitArr/@VID601"},{"kind":2,"language":"xpath","value":"//CRCUnitArr[@Name='대룡산의 아름다움']/@*[name()='VID600' or name()='VID601']"}] \ No newline at end of file +[{"kind":2,"language":"xpath","value":"//CROwneUnit[position() = (//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = 170]/@ClipIndex) + 1]/CRCUnitArr/@VID600 | //CROwneUnit[position() = (//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = 170]/@ClipIndex) + 1]/CRCUnitArr/@VID601"},{"kind":2,"language":"xpath","value":"//CRCUnitArr[@Name='대룡산의 아름다움']/@*[name()='VID600' or name()='VID601']"},{"kind":2,"language":"xpath","value":"sum(//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='나무기차']]/preceding-sibling::CROwneUnit)]/preceding-sibling::CRTrackClip/@Length)"},{"kind":2,"language":"xpath","value":"//CROwneUnit[CRCUnitArr[@Name='나무 기차']]"},{"kind":2,"language":"xpath","value":"sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/preceding-sibling::CRTrackClip/@Length)\r\nsum(//CRTrackList[@Name='텍스트']/CRTrackClip[]/preceding-sibling::CRTrackClip/@Length)"},{"kind":2,"language":"xpath","value":"count(//CROwneUnit[CRCUnitArr[@Name='나무 기차']]/preceding-sibling::CROwneUnit)"},{"kind":2,"language":"xpath","value":"//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='나무 기차']]/preceding-sibling::CROwneUnit)]"},{"kind":2,"language":"xpath","value":"//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=1]"},{"kind":2,"language":"xpath","value":"sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][@ClipIndex=0]/preceding-sibling::CRTrackClip/@Length)"},{"kind":2,"language":"xpath","value":"//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][@ClipIndex=1]/@Length"}] \ No newline at end of file diff --git a/회차별채점자료/2502/json_채점기준표/0320_DIC_채점기준표_Clipping.json b/회차별채점자료/2502/json_채점기준표/0320_DIC_채점기준표_Clipping.json deleted file mode 100644 index e3bb12d..0000000 --- a/회차별채점자료/2502/json_채점기준표/0320_DIC_채점기준표_Clipping.json +++ /dev/null @@ -1,561 +0,0 @@ -{ - "0": { - "1": { - "ele": "none", - "point": 0 - }, - "2": { - "ele": "none", - "point": 0 - }, - "3": { - "ele": "none", - "point": 0 - }, - "4": { - "ele": "none", - "point": 0 - }, - "5": { - "ele": "none", - "point": 0 - }, - "6": { - "ele": "none", - "point": 0 - }, - "7": { - "ele": "none", - "point": 0 - }, - "8": { - "ele": "$[?(@.width == 65 && @.height == 45)]", - "type": "boolean", - "point": 10 - } - }, - "1": { - "1": { - "ele": "none", - "point": 0 - }, - "2": { - "ele": "none", - "point": 0 - }, - "3": { - "ele": "none", - "point": 0 - }, - "4": { - "ele": "none", - "point": 0 - }, - "5": { - "ele": "$.children[?(@.name=='Animal Village')].name", - "value": "Animal Village", - "point": 10 - }, - "6": { - "ele": "$.children[?(@.name=='Animal Village')].text.font.names[0]", - "type": "font", - "value": "Arial", - "point": 10 - }, - "7": { - "ele": "$.children[?(@.name=='Animal Village')].text.font.names[0]", - "value": "Arial-BoldItalicMT", - "point": 10 - }, - "8": { - "ele": "$.children[?(@.name=='Animal Village')].text.font.sizes[0]", - "value": 48, - "point": 10 - }, - "9": { - "ele": "$.children[?(@.name=='Animal Village')].text.font.colors[0]", - "type": "color", - "value": "65f743", - "point": 10 - }, - "10": { - "ele": "none", - "point": 0 - }, - "11": { - "ele": "none", - "point": 0 - }, - "12": { - "ele": "none", - "point": 0 - }, - "13": { - "ele": "$.children[?(@.name=='동물 마을')].name", - "value": "동물 마을", - "point": 10 - }, - "14": { - "ele": "$.children[?(@.name=='동물 마을')].text.font.names[0]", - "type": "font", - "value": "GungsuhChe", - "point": 10 - }, - "15": { - "ele": "$.children[?(@.name=='동물 마을')].text.font.sizes[0]", - "value": 36, - "point": 10 - }, - "16": { - "ele": "$.children[?(@.name=='동물 마을')].text.font.colors[0]", - "type": "color", - "value": "f74343", - "point": 10 - }, - "17": { - "ele": "none", - "point": 0 - }, - "18": { - "ele": "none", - "point": 0 - }, - "19": { - "ele": "none", - "point": 0 - }, - "20": { - "ele": "none", - "point": 0 - }, - "21": { - "ele": "none", - "point": 0 - }, - "22": { - "ele": "none", - "point": 0 - }, - "23": { - "ele": "none", - "point": 0 - }, - "24": { - "ele": "none", - "point": 0 - }, - "25": { - "ele": "none", - "point": 0 - }, - "26": { - "ele": "none", - "point": 0 - }, - "27": { - "ele": "$[?(@.width == 65 && @.height == 45)]", - "type": "boolean", - "point": 10 - } - }, - "2": { - "videoStartTime": 160, - "openingStartTime": 0, - "1": { - "ele": "//CRClipArr/CRClip[position() = //CRTrackList[1]/CRTrackClip/@ClipIndex]/@Path", - "type": "array", - "value": [ - "동영상.mp4", - "이미지2.jpg", - "이미지1.jpg", - "이미지3.jpg" - ], - "point": 4 - }, - "2": { - "ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1][@Speed='150']", - "point": 2 - }, - "3": { - "ele": "count(//CRClip[@Path='동영상.mp4']/preceding-sibling::*)", - "type": "startend", - "start": "0", - "end": "370", - "point": 2 - }, - "4": { - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='동영상.mp4']/preceding-sibling::*)]//CRFilter[@Type='1'][@ID='43'][@VID100='9'][@VID103<=0.7 and @VID103>0.69]", - "point": 3 - }, - "5": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@Name", - "type": "video", - "value": "나무기차", - "point": 3 - }, - "6": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", - "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID102", - "search": "나무기차", - "type": "video", - "value": "돋움체", - "point": 2 - }, - "7": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", - "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID101", - "search": "나무기차", - "type": "video", - "value": "120", - "point": 2 - }, - "8": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", - "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='4']/@VID100", - "search": "나무기차", - "type": "video", - "value": "-13290016", - "point": 2 - }, - "9": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", - "ele2": "//CRCUnitArr[@Name={search}]/@*[name()='VID600' or name()='VID601']", - "type": "video", - "search": "나무기차", - "value": [ - 0.240, - 0.777 - ], - "point": 2 - }, - "10": { - "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/preceding-sibling::CRTrackClip/@Length)", - "ele2": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/preceding-sibling::CRTrackClip/@Length)", - "search": "나무기차", - "type": "video", - "value": 160, - "point": 2 - }, - "11": { - "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/@Length", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/@Length", - "search": "나무기차", - "type": "video", - "value": "150", - "point": 2 - }, - "12": { - "existEle": "//CRClip[@Path='동영상.mp4']", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='동영상.mp4']/preceding-sibling::*)]/@Mute", - "type": "searchIndex", - "value": "1", - "point": 2 - }, - "13": { - "existEle": "//CRClip[@Path='이미지2.jpg'] | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지2.jpg']", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지2.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지2.jpg']/../preceding-sibling::CRClip)][1]/@Length", - "type": "searchIndex", - "value": "150", - "point": 2 - }, - "14": { - "type": "multi", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지2.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지2.jpg']/../preceding-sibling::CRClip)][1]//CRFilter/@*[name()='ID' or name()='VID101']", - "value": [ - "96", - "13" - ], - "point": 2 - }, - "15": { - "type": "multi", - "ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지2.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지2.jpg']/../preceding-sibling::CRClip)][1]/preceding-sibling::CRTrackClip)]/@*[name()='ID' or name()='Range' or name()='Type']", - "value": [ - "35", - "490:520", - "2" - ], - "point": 2 - }, - "16": { - "existEle": "//CRClip[@Path='이미지1.jpg'] | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지1.jpg']", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지1.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지1.jpg']/../preceding-sibling::CRClip)][1]/@Length", - "type": "searchIndex", - "value": "180", - "point": 2 - }, - "17": { - "type": "multi", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지1.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지1.jpg']/../preceding-sibling::CRClip)][1]//CRFilter/@*[name()='ID' or name()='VID102']", - "value": [ - "104", - "8" - ], - "point": 2 - }, - "18": { - "type": "multi", - "ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지1.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지1.jpg']/../preceding-sibling::CRClip)][1]/preceding-sibling::CRTrackClip)]/@*[name()='ID' or name()='Range' or name()='Type']", - "value": [ - "19", - "670:700", - "2" - ], - "point": 2 - }, - "19": { - "existEle": "//CRClip[@Path='이미지3.jpg'] | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지3.jpg']", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지3.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지3.jpg']/../preceding-sibling::CRClip)][1]/@Length", - "type": "searchIndex", - "value": "180", - "point": 2 - }, - "20": { - "type": "multi", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지3.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지3.jpg']/../preceding-sibling::CRClip)][1]//CRFilter/@*[name()='ID' or name()='VID103']", - "value": [ - "108", - "90" - ], - "point": 2 - }, - "21": { - "type": "multi", - "ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지3.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지3.jpg']/../preceding-sibling::CRClip)][1]/preceding-sibling::CRTrackClip)]/@*[name()='ID' or name()='Range' or name()='Type']", - "value": [ - "9", - "820:880", - "2" - ], - "point": 2 - }, - "22": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@Name", - "type": "opening", - "value": "멋진 기차 모형 (Fine Train Model)", - "point": 3 - }, - "23": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", - "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID102", - "search": "멋진 기차 모형 (Fine Train Model)", - "type": "opening", - "value": "바탕체", - "point": 2 - }, - "24": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", - "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID101", - "search": "멋진 기차 모형 (Fine Train Model)", - "type": "opening", - "value": "150", - "point": 2 - }, - "25": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", - "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='4']/@VID100", - "search": "멋진 기차 모형 (Fine Train Model)", - "type": "opening", - "value": "-14688179", - "point": 2 - }, - "26": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']/@*[name()='VID100' or name()='VID101']", - "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='2']/@*[name()='VID100' or name()='VID101']", - "search": "멋진 기차 모형 (Fine Train Model)", - "type": "opening", - "value": [ - "0.2", - "-16307450" - ], - "point": 2 - }, - "27": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@*[name()='VID505' or name()='VID507']", - "ele2": "//CRCUnitArr[@Name='{search}']/@*[name()='VID505' or name()='VID507']", - "search": "멋진 기차 모형 (Fine Train Model)", - "type": "opening", - "value": [ - "2", - "2" - ], - "point": 3 - }, - "28": { - "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/preceding-sibling::CRTrackClip/@Length)", - "ele2": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/preceding-sibling::CRTrackClip/@Length)", - "search": "멋진 기차 모형 (Fine Train Model)", - "type": "opening", - "value": 0, - "point": 2 - }, - "29": { - "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/@Length", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = {startTime}]/@Length", - "ele3": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/@Length", - "search": "멋진 기차 모형 (Fine Train Model)", - "type": "opening", - "value": "120", - "point": 2 - }, - "30": { - "ele": "//CRTrackList[@Name='오디오1'][@Count>='1']/CRTrackClip[1][not(@ClipIndex='-1')]", - "point": 2 - }, - "31": { - "ele": "//CRTrackArr/CRAudioTrackArr/CRTrackList[@Name='오디오1']/CRTrackClip[@Length='880']", - "point": 2 - }, - "32": { - "ele": "//CRTrackArr/CRAudioTrackArr/CRTrackList[@Name='오디오1']//CRFilter[@Type='2'][@ID='1'][@VID8='60']", - "point": 2 - } - }, - "4": { - "1": { - "type": "multi", - "ele": "//Document/Width/@value | //Document/Height/@value", - "value": [ - "650", - "450" - ], - "point": 5, - "desc": "캔버스 사이즈 650*450" - }, - "2": { - "ele": "none", - "point": 5, - "desc": "배경색 문항은 채점 불가" - }, - "3": { - "ele": "//Layer[contains(Name/@value, 'Layer 2')][MaskOpType/@value='Layering']", - "point": 6 - }, - "4": { - "ele": "none", - "point": 5, - "desc": "가로방향 흐릿하게 문항은 채점 불가" - }, - "5": { - "ele": "//Layer[contains(Name/@value, 'Layer 3')]//shape_type/@value", - "answer": "ROUNDED_RECTANGLE", - "point": 6 - }, - "6": { - "type": "size", - "posX": "//Layer[contains(Name/@value, 'Layer 3')]//op_points[Item]/Item[last()]/X/@value - //Layer[contains(Name/@value, 'Layer 3')]//op_points[Item]/Item[1]/X/@value", - "posY": "//Layer[contains(Name/@value, 'Layer 3')]//op_points[Item]/Item[last()]/Y/@value - //Layer[contains(Name/@value, 'Layer 3')]//op_points[Item]/Item[1]/Y/@value", - "value": { - "width": 370, - "height": 60 - }, - "point": 3, - "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" - }, - "7": { - "type": "gradient", - "startColor": "//Layer[contains(Name/@value, 'Layer 3')]//gradient_start_color/@value", - "endColor": "//Layer[contains(Name/@value, 'Layer 3')]//gradient_end_color/@value", - "value": { - "startColor": "347813", - "endColor": "041177" - }, - "point": 6 - }, - "8": { - "type": "exact", - "ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value", - "value": "어린이 과학관", - "point": 5 - }, - "9": { - "type": "exact", - "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value", - "value": "돋움", - "point": 3 - }, - "10": { - "type": "exact", - "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Italic/@value", - "value": "True", - "point": 3 - }, - "11": { - "type": "exact", - "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value", - "value": "32", - "point": 3 - }, - "12": { - "type": "color", - "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value", - "value": "f04da5", - "point": 3, - "desc": "색상 코드 비교 시 소문자로 입력할 것" - }, - "13": { - "type": "exact", - "ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value", - "value": "3", - "point": 3 - }, - "14": { - "type": "color", - "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value", - "value": "ffe000", - "point": 3, - "desc": "색상 코드 비교 시 소문자로 입력할 것" - }, - "15": { - "ele": "//Layer[MaskOpType/@value='Clipping'][last()]", - "point": 6, - "desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함" - }, - "16": { - "ele": "//Layer[contains(Name/@value, 'Layer 3')]//shape_type/@value", - "value": "RECTANGLE", - "point": 3 - }, - "17": { - "type": "size", - "posX": "//Layer[contains(Name/@value, 'Layer 5')]//op_points[Item]/Item[last()]/X/@value - //Layer[contains(Name/@value, 'Layer 5')]//op_points[Item]/Item[1]/X/@value", - "posY": "//Layer[contains(Name/@value, 'Layer 5')]//op_points[Item]/Item[last()]/Y/@value - //Layer[contains(Name/@value, 'Layer 5')]//op_points[Item]/Item[1]/Y/@value", - "value": { - "width": 150, - "height": 150 - }, - "point": 3, - "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" - }, - "18": { - "ele": "//Layer[contains(Name/@value, 'Layer 5')]//outline_peninfo/Width/@value", - "value": "7", - "point": 3 - }, - "19": { - "type": "color", - "ele": "//Layer//Shape[shape_type/@value='RECTANGLE'][contains(draw_type/@value, 'Outline')]/primary_color/@value", - "value": "008878", - "point": 3, - "desc": "색상 코드 비교 시 소문자로 입력할 것(채우기:secondary_color, 외곽선:primary_color)" - }, - "20": { - "type": "shadow", - "ele": { - "shadow": "//Layer//Shape[shape_type/@value='RECTANGLE'][contains(draw_type/@value, 'Shadow')]", - "width": "//Layer//Shape[shape_type/@value='RECTANGLE'][contains(draw_type/@value, 'Shadow')]/shadow_width/@value", - "distance": "//Layer//Shape[shape_type/@value='RECTANGLE'][contains(draw_type/@value, 'Shadow')]/shadow_distance/@value", - "blur": "//Layer//Shape[shape_type/@value='RECTANGLE'][contains(draw_type/@value, 'Shadow')]/shadow_blur/@value", - "angle": "//Layer//Shape[shape_type/@value='RECTANGLE'][contains(draw_type/@value, 'Shadow')]/shadow_angle/@value" - }, - "value": { - "width": "5", - "distance": "3", - "blur": "1", - "angle": "320" - }, - "point": 5, - "desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점" - } - } -} \ No newline at end of file diff --git a/회차별채점자료/2502/json_채점기준표/0320_DIC_채점기준표_Layer.json b/회차별채점자료/2502/json_채점기준표/0320_DIC_채점기준표_Layer.json deleted file mode 100644 index 8ec84df..0000000 --- a/회차별채점자료/2502/json_채점기준표/0320_DIC_채점기준표_Layer.json +++ /dev/null @@ -1,558 +0,0 @@ -{ - "0": { - "1": { - "ele": "none", - "point": 0 - }, - "2": { - "ele": "none", - "point": 0 - }, - "3": { - "ele": "none", - "point": 0 - }, - "4": { - "ele": "none", - "point": 0 - }, - "5": { - "ele": "none", - "point": 0 - }, - "6": { - "ele": "none", - "point": 0 - }, - "7": { - "ele": "none", - "point": 0 - }, - "8": { - "ele": "$[?(@.width == 65 && @.height == 45)]", - "type": "boolean", - "point": 10 - } - }, - "1": { - "1": { - "ele": "none", - "point": 0 - }, - "2": { - "ele": "none", - "point": 0 - }, - "3": { - "ele": "none", - "point": 0 - }, - "4": { - "ele": "$.children[?(@.name=='마나가하')]", - "type": "boolean", - "point": 10 - }, - "5": { - "ele": "none", - "point": 0 - }, - "6": { - "ele": "$.children[?(@.name=='Managaha Island')].name", - "value": "Managaha Island", - "point": 10 - }, - "7": { - "ele": "$.children[?(@.name=='Managaha Island')].text.font.names[0]", - "type": "font", - "value": "Arial", - "point": 10 - }, - "8": { - "ele": "$.children[?(@.name=='Managaha Island')].text.font.names[0]", - "value": "Arial-BoldItalicMT", - "point": 10 - }, - "9": { - "ele": "$.children[?(@.name=='Managaha Island')].text.font.sizes[0]", - "value": 48, - "point": 10 - }, - "10": { - "ele": "$.children[?(@.name=='Managaha Island')].text.font.colors[0]", - "type": "color", - "value": "495fd1", - "point": 10 - }, - "11": { - "ele": "none", - "point": 0 - }, - "12": { - "ele": "none", - "point": 0 - }, - "13": { - "ele": "none", - "point": 0 - }, - "14": { - "ele": "$.children[?(@.name=='사이판 섬 즐기기')].name", - "value": "사이판 섬 즐기기", - "point": 10 - }, - "15": { - "ele": "$.children[?(@.name=='사이판 섬 즐기기')].text.font.names[0]", - "type": "font", - "value": "DotumChe", - "point": 10 - }, - "16": { - "ele": "$.children[?(@.name=='사이판 섬 즐기기')].text.font.sizes[0]", - "value": 36, - "point": 10 - }, - "17": { - "ele": "$.children[?(@.name=='사이판 섬 즐기기')].text.font.colors[0]", - "type": "color", - "value": "e52e20", - "point": 10 - }, - "18": { - "ele": "none", - "point": 0 - }, - "19": { - "ele": "none", - "point": 0 - }, - "20": { - "ele": "none", - "point": 0 - }, - "21": { - "ele": "none", - "point": 0 - }, - "22": { - "ele": "$.children[?(@.name=='마나가하')]", - "type": "boolean", - "point": 10 - }, - "23": { - "ele": "none", - "point": 0 - }, - "24": { - "ele": "none", - "point": 0 - }, - "25": { - "ele": "none", - "point": 0 - }, - "26": { - "ele": "$[?(@.width == 65 && @.height == 35)]", - "type": "boolean", - "point": 10 - } - }, - "2": { - "1": { - "ele": "//CRClipArr/CRClip[position() = //CRTrackList[1]/CRTrackClip/@ClipIndex]/@Path", - "type": "array", - "value": [ - "동영상.mp4", - "이미지1.jpg", - "이미지3.jpg", - "이미지2.jpg" - ], - "point": 4 - }, - "2": { - "ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1][@Speed='150']", - "point": 2 - }, - "3": { - "ele": "count(//CRClip[@Path='동영상.mp4']/preceding-sibling::*)", - "type": "startend", - "start": "0", - "end": "270", - "point": 2 - }, - "4": { - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='동영상.mp4']/preceding-sibling::*)]//CRFilter[@ID='40'][@VID100='8'][@VID103='0.89999998']", - "point": 3 - }, - "5": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@Name", - "type": "video", - "value": "자연이 빚어낸 섬", - "point": 3 - }, - "6": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", - "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID102", - "search": "자연이 빚어낸 섬", - "type": "video", - "value": "바탕체", - "point": 2 - }, - - "7": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", - "ele2": "//CRCUnitArr[@Name=\"{search}\"]//GCUnitPool[@Type='1']/GCUnit/@VID101", - "search": "자연이 빚어낸 섬", - "type": "video", - "value": "120", - "point": 2 - }, - "8": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", - "ele2": "//CRCUnitArr[@Name=\"{search}\"]//GCUnitPool/GCUnit[@Type='4']/@VID100", - "search": "자연이 빚어낸 섬", - "type": "video", - "value": "-1487764", - "point": 2 - }, - "9": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@VID600' or name()='VID601", - "ele2": "//CRCUnitArr[@Name={search}]/@*[name()='VID600' or name()='VID601']", - "type": "video", - "search": "자연이 빚어낸 섬", - "value": [ - 0.071, - 0.777 - ], - "point": 2 - }, - "10": { - "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/preceding-sibling::CRTrackClip/@Length)", - "ele2": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/preceding-sibling::CRTrackClip/@Length)", - "search": "자연이 빚어낸 섬", - "type": "video", - "value": 150, - "point": 2 - }, - "11": { - "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/@Length", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/@Length", - "search": "자연이 빚어낸 섬", - "type": "video", - "value": "120", - "point": 2 - }, - "12": { - "existEle": "//CRClip[@Path='동영상.mp4']", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='동영상.mp4']/preceding-sibling::*)]/@Mute", - "type": "searchIndex", - "value": "1", - "point": 2 - }, - "13": { - "existEle": "//CRClip[@Path='이미지1.jpg'] | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지1.jpg']", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지1.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지1.jpg']/../preceding-sibling::CRClip)][1]/@Length", - "type": "searchIndex", - "value": "150", - "point": 2 - }, - "14": { - "type": "multi", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지1.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지1.jpg']/../preceding-sibling::CRClip)][1]//CRFilter/@*[name()='ID' or name()='VID101']", - "value": [ - "173", - "450" - ], - "point": 2 - }, - "15": { - "type": "multi", - "ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지1.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지1.jpg']/../preceding-sibling::CRClip)][1]/preceding-sibling::CRTrackClip)]/@*[name()='ID' or name()='Range' or name()='Type']", - "value": [ - "11", - "360:420", - "2" - ], - "point": 2 - }, - "16": { - "existEle": "//CRClip[@Path='이미지3.jpg'] | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지3.jpg']", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지3.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지3.jpg']/../preceding-sibling::CRClip)][1]/@Length", - "type": "searchIndex", - "value": "180", - "point": 2 - }, - "17": { - "type": "multi", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지3.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지3.jpg']/../preceding-sibling::CRClip)][1]//CRFilter/@*[name()='ID' or name()='VID101']", - "value": [ - "128", - "7" - ], - "point": 2 - }, - "18": { - "type": "multi", - "ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지3.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지3.jpg']/../preceding-sibling::CRClip)][1]/preceding-sibling::CRTrackClip)]/@*[name()='ID' or name()='Range' or name()='Type']", - "value": [ - "8", - "540:600", - "2" - ], - "point": 2 - }, - "19": { - "existEle": "//CRClip[@Path='이미지2.jpg'] | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지2.jpg']", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지2.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지2.jpg']/../preceding-sibling::CRClip)][1]/@Length", - "type": "searchIndex", - "value": "180", - "point": 2 - }, - "20": { - "type": "multi", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지2.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지2.jpg']/../preceding-sibling::CRClip)][1]//CRFilter/@*[name()='ID' or name()='VID104']", - "value": [ - "67", - "5" - ], - "point": 2 - }, - "21": { - "type": "multi", - "ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지2.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지2.jpg']/../preceding-sibling::CRClip)][1]/preceding-sibling::CRTrackClip)]/@*[name()='ID' or name()='Range' or name()='Type']", - "value": [ - "19", - "750:780", - "2" - ], - "point": 2 - }, - "22": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@Name", - "type": "opening", - "value": "마나가하섬으로 가자 (Let's go to Managaha Island)", - "point": 3 - }, - "23": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", - "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID102", - "search": "마나가하섬으로 가자 (Let's go to Managaha Island)", - "type": "opening", - "value": "돋움체", - "point": 2 - }, - "24": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", - "ele2": "//CRCUnitArr[@Name=\"{search}\"]//GCUnitPool[@Type='1']/GCUnit/@VID101", - "search": "마나가하섬으로 가자 (Let's go to Managaha Island)", - "type": "opening", - "value": "150", - "point": 2 - }, - "25": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", - "ele2": "//CRCUnitArr[@Name=\"{search}\"]//GCUnitPool/GCUnit[@Type='4']/@VID100", - "search": "마나가하섬으로 가자 (Let's go to Managaha Island)", - "type": "opening", - "value": "-1487764", - "point": 2 - }, - "26": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']/@*[name()='VID100' or name()='VID101']", - "ele2": "//CRCUnitArr[@Name=\"{search}\"]//GCUnitPool/GCUnit[@Type='2']/@*[name()='VID100' or name()='VID101']", - "search": "마나가하섬으로 가자 (Let's go to Managaha Island)", - "type": "opening", - "value": [ - "0.300", - "-1" - ], - "point": 2 - }, - "27": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@*[name()='VID505' or name()='VID507']", - "ele2": "//CRCUnitArr[@Name=\"{search}\"]/@*[name()='VID505' or name()='VID507']", - "search": "마나가하섬으로 가자 (Let's go to Managaha Island)", - "type": "opening", - "value":[ - "1", - "2" - ], - "point": 3 - }, - "28": { - "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/preceding-sibling::CRTrackClip/@Length)", - "ele2": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name=\"{search}\"]]/preceding-sibling::CROwneUnit)]/preceding-sibling::CRTrackClip/@Length)", - "search": "마나가하섬으로 가자 (Let's go to Managaha Island)", - "type": "opening", - "value": 0, - "point": 2 - }, - "29": { - "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/@Length", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = {startTime}]/@Length", - "ele3": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name=\"{search}\"]]/preceding-sibling::CROwneUnit)]/@Length", - "search": "마나가하섬으로 가자 (Let's go to Managaha Island)", - "type": "opening", - "value": "120", - "point": 2 - }, - "30": { - "ele": "//CRTrackList[@Name='오디오1'][@Count>='1']/CRTrackClip[1][not(@ClipIndex='-1')]", - "point": 2 - }, - "31": { - "ele": "//CRTrackArr/CRAudioTrackArr/CRTrackList[@Name='오디오1']/CRTrackClip[@Length='720']", - "point": 2 - }, - "32": { - "ele": "//CRTrackArr/CRAudioTrackArr/CRTrackList[@Name='오디오1']//CRFilter[@Type='2'][@ID='1'][@VID8='90']", - "point": 2 - } - }, - "4": { - "1": { - "type": "multi", - "ele": "//Document/Width/@value | //Document/Height/@value", - "value": [ - "650", - "450" - ], - "point": 5, - "desc": "캔버스 사이즈 650*450" - }, - "2": { - "ele": "none", - "point": 5, - "desc": "배경색 문항은 채점 불가" - }, - "3": { - "ele": "//Layer[contains(Name/@value, 'Layer 2')][MaskOpType/@value='Layering']", - "point": 6 - }, - "4": { - "ele": "none", - "point": 5, - "desc": "가로방향 흐릿하게 문항은 채점 불가" - }, - "5": { - "ele": "//Layer[contains(Name/@value, 'Layer 3')]//shape_type/@value", - "answer": "ROUNDED_RECTANGLE", - "point": 6 - }, - "6": { - "type": "size", - "posX": "//Layer[contains(Name/@value, 'Layer 3')]//op_points[Item]/Item[last()]/X/@value - //Layer[contains(Name/@value, 'Layer 3')]//op_points[Item]/Item[1]/X/@value", - "posY": "//Layer[contains(Name/@value, 'Layer 3')]//op_points[Item]/Item[last()]/Y/@value - //Layer[contains(Name/@value, 'Layer 3')]//op_points[Item]/Item[1]/Y/@value", - "value": { - "width": 370, - "height": 60 - }, - "point": 3, - "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" - }, - "7": { - "type": "gradient", - "startColor": "//Layer[contains(Name/@value, 'Layer 3')]//gradient_start_color/@value", - "endColor": "//Layer[contains(Name/@value, 'Layer 3')]//gradient_end_color/@value", - "value": { - "startColor": "347813", - "endColor": "041177" - }, - "point": 6 - }, - "8": { - "type": "exact", - "ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value", - "value": "어린이 과학관", - "point": 5 - }, - "9": { - "type": "exact", - "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value", - "value": "돋움", - "point": 3 - }, - "10": { - "type": "exact", - "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Italic/@value", - "value": "True", - "point": 3 - }, - "11": { - "type": "exact", - "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value", - "value": "32", - "point": 3 - }, - "12": { - "type": "color", - "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value", - "value": "f04da5", - "point": 3, - "desc": "색상 코드 비교 시 소문자로 입력할 것" - }, - "13": { - "type": "exact", - "ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value", - "value": "3", - "point": 3 - }, - "14": { - "type": "color", - "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value", - "value": "ffe000", - "point": 3, - "desc": "색상 코드 비교 시 소문자로 입력할 것" - }, - "15": { - "ele": "//Layer[MaskOpType/@value='Clipping'][last()]", - "point": 6, - "desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함" - }, - "16": { - "ele": "//Layer[contains(Name/@value, 'Layer 3')]//shape_type/@value", - "value": "RECTANGLE", - "point": 3 - }, - "17": { - "type": "size", - "posX": "//Layer[contains(Name/@value, 'Layer 5')]//op_points[Item]/Item[last()]/X/@value - //Layer[contains(Name/@value, 'Layer 5')]//op_points[Item]/Item[1]/X/@value", - "posY": "//Layer[contains(Name/@value, 'Layer 5')]//op_points[Item]/Item[last()]/Y/@value - //Layer[contains(Name/@value, 'Layer 5')]//op_points[Item]/Item[1]/Y/@value", - "value": { - "width": 150, - "height": 150 - }, - "point": 3, - "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" - }, - "18": { - "ele": "//Layer[contains(Name/@value, 'Layer 5')]//outline_peninfo/Width/@value", - "value": "7", - "point": 3 - }, - "19": { - "type": "color", - "ele": "//Layer//Shape[shape_type/@value='RECTANGLE'][contains(draw_type/@value, 'Outline')]/primary_color/@value", - "value": "008878", - "point": 3, - "desc": "색상 코드 비교 시 소문자로 입력할 것(채우기:secondary_color, 외곽선:primary_color)" - }, - "20": { - "type": "shadow", - "ele": { - "shadow": "//Layer//Shape[shape_type/@value='RECTANGLE'][contains(draw_type/@value, 'Shadow')]", - "width": "//Layer//Shape[shape_type/@value='RECTANGLE'][contains(draw_type/@value, 'Shadow')]/shadow_width/@value", - "distance": "//Layer//Shape[shape_type/@value='RECTANGLE'][contains(draw_type/@value, 'Shadow')]/shadow_distance/@value", - "blur": "//Layer//Shape[shape_type/@value='RECTANGLE'][contains(draw_type/@value, 'Shadow')]/shadow_blur/@value", - "angle": "//Layer//Shape[shape_type/@value='RECTANGLE'][contains(draw_type/@value, 'Shadow')]/shadow_angle/@value" - }, - "value": { - "width": "5", - "distance": "3", - "blur": "1", - "angle": "320" - }, - "point": 5, - "desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점" - } - } -} \ No newline at end of file