一键导入
pokemon-ontology-mapping
포켓몬 데이터를 RDF 트리플과 OWL 클래스·속성·제약·추론규칙으로 변환하는 매핑 가이드. IRI 네임스페이스 컨벤션, 클래스 계층 설계, 객체/데이터 속성 구분, Turtle 직렬화, 챕터별 그래프 슬라이스 생성에 사용.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
포켓몬 데이터를 RDF 트리플과 OWL 클래스·속성·제약·추론규칙으로 변환하는 매핑 가이드. IRI 네임스페이스 컨벤션, 클래스 계층 설계, 객체/데이터 속성 구분, Turtle 직렬화, 챕터별 그래프 슬라이스 생성에 사용.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Cytoscape.js 기반 인터랙티브 온톨로지 그래프 렌더링·노드 추가·엣지 그리기·추론 애니메이션·모바일 터치 지원 구현 가이드. 그래프 슬라이스 표시, 노드 스타일링(클래스/인스턴스/리터럴 시각 구분), 레이아웃 선택, 핀치줌/롱프레스 메뉴 작업 시 사용.
챕터별 인터랙티브 실습(그래프 빌드·드래그앤드롭 분류·트리플 빌더·매칭·쿼리 빌더·추론 시뮬레이션·퀴즈) 설계 패턴과 정답 검증 로직 작성 가이드. exercise JSON 스키마, 힌트 시스템, 부분 점수, 검증 함수 명세 작성 시 사용.
온톨로지·기술 개념을 한국어 비전공 초보자에게 쉽고 친근하게 전달하는 글쓰기 가이드. 정중체 톤, 전문 용어 풀이 3종 세트, 비유 활용, 인지 부하 분산, 단락 호흡, 모바일 가독성을 위한 챕터 본문 작성 시 사용.
온톨로지를 전혀 모르는 초보자를 위한 12~15개 챕터 커리큘럼 설계 가이드. 클래스·인스턴스·트리플·계층·SPARQL·OWL·추론·상위 온톨로지를 점진적 학습 흐름으로 구성, 챕터별 인지 부하 관리, 선행 의존성 정의, 학습 목표 작성에 사용.
PokeAPI에서 전 세대 포켓몬 한국어 데이터를 수집·정규화하여 임베드용 JSON 번들을 만드는 빌드 파이프라인을 작성·수정·실행할 때 사용. fetch-data.js 빌드 스크립트, ko 로케일 추출, 진화체인 정규화, 디스크 캐싱, 동시성/재시도 처리, _workspace/data/ 산출물 생성 작업이 필요할 때 반드시 이 스킬을 호출할 것.
포켓몬 PokeAPI 데이터를 한국어로 받아 온톨로지 학습 프로그램(단일 HTML, 모바일 반응형, 12~15 챕터, 그래프 시각화, 인터랙티브 실습)을 구축하는 전체 워크플로우 오케스트레이터. "포켓몬 온톨로지 만들어줘", "온톨로지 학습 프로그램 빌드", "한국어 포켓몬 그래프 학습", "다시 빌드", "챕터 N만 다시", "데이터 새로 받아줘", "특정 챕터 수정", "QA 다시 돌려줘", "모바일 깨짐 고쳐줘" 같은 요청 시 반드시 이 스킬을 사용할 것.
| name | pokemon-ontology-mapping |
| description | 포켓몬 데이터를 RDF 트리플과 OWL 클래스·속성·제약·추론규칙으로 변환하는 매핑 가이드. IRI 네임스페이스 컨벤션, 클래스 계층 설계, 객체/데이터 속성 구분, Turtle 직렬화, 챕터별 그래프 슬라이스 생성에 사용. |
_workspace/data/의 평탄한 JSON을 RDF/OWL 온톨로지 모델로 변환한다.
단 하나의 네임스페이스만 사용: poke: (학습 단순화).
| 카테고리 | 표기 | 예시 |
|---|---|---|
| 클래스 | PascalCase | poke:Pokemon, poke:FireType, poke:LegendaryPokemon |
| 객체 속성 | lowerCamelCase | poke:hasType, poke:evolvesTo, poke:livesIn |
| 데이터 속성 | lowerCamelCase | poke:height, poke:weight, poke:hp |
| 인스턴스 | 한국어 슬러그 or dex | poke:피카츄 or poke:pokemon-25 |
학습용이므로 챕터에 따라 한국어 슬러그 또는 dex 번호 중 친근한 쪽 사용:
poke:피카츄) — 가독성 우선poke:pokemon-25) — 표준 형식poke:Pokemon
├── poke:LegendaryPokemon
├── poke:MythicalPokemon
└── (타입 차원의 클래스 - 다중 상속)
poke:FireTypePokemon ⊂ poke:Pokemon
poke:WaterTypePokemon ⊂ poke:Pokemon
...
poke:Type
├── poke:FireType
├── poke:WaterType
└── ...
poke:Move
├── poke:PhysicalMove
├── poke:SpecialMove
└── poke:StatusMove
poke:Ability
poke:Habitat
poke:Generation
poke:EggGroup
poke:EvolutionTrigger
핵심 결정:
poke:리자몽 poke:hasType poke:불꽃타입poke:리자몽 rdf:type poke:FireTypePokemon객체 속성 (s, p, o 모두 IRI):
poke:hasType (도메인 Pokemon, 레인지 Type)poke:evolvesTo (도메인 Pokemon, 레인지 Pokemon, inverse poke:evolvesFrom)poke:hasAbility (도메인 Pokemon, 레인지 Ability)poke:livesIn (도메인 Pokemon, 레인지 Habitat)poke:fromGeneration (도메인 Pokemon, 레인지 Generation)poke:strongAgainst (도메인 Type, 레인지 Type, symmetric? no)poke:weakAgainst (도메인 Type, 레인지 Type, inverse poke:strongAgainst)데이터 속성 (o가 literal):
poke:height (xsd:decimal, 미터)poke:weight (xsd:decimal, kg)poke:hp, poke:attack, poke:defense (xsd:integer)poke:isLegendary (xsd:boolean)poke:dexNumber (xsd:integer)function pokemonToTriples(p) {
const id = `poke:pokemon-${p.dexNumber}`;
const triples = [];
// 타입 선언
triples.push([id, 'rdf:type', 'poke:Pokemon']);
triples.push([id, 'rdfs:label', `"${p.koName}"@ko`]);
// 타입 (객체 속성)
for (const t of p.types) {
triples.push([id, 'poke:hasType', t]);
}
// 데이터 속성
triples.push([id, 'poke:dexNumber', `"${p.dexNumber}"^^xsd:integer`]);
triples.push([id, 'poke:height', `"${p.height / 10}"^^xsd:decimal`]);
triples.push([id, 'poke:weight', `"${p.weight / 10}"^^xsd:decimal`]);
triples.push([id, 'poke:hp', `"${p.stats.hp}"^^xsd:integer`]);
// ...
// 진화 (evolution-chains.json 별도 처리에서)
// 전설 (boolean → 클래스 또는 데이터속성 둘 다)
if (p.isLegendary) {
triples.push([id, 'rdf:type', 'poke:LegendaryPokemon']);
triples.push([id, 'poke:isLegendary', '"true"^^xsd:boolean']);
}
return triples;
}
학습자가 읽기 쉬운 Turtle을 생성:
@prefix poke: <http://example.org/poke#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
poke:pokemon-25 a poke:Pokemon ;
rdfs:label "피카츄"@ko ;
poke:hasType poke:type-electric ;
poke:dexNumber "25"^^xsd:integer ;
poke:height "0.4"^^xsd:decimal ;
poke:evolvesTo poke:pokemon-26 .
학습용 Turtle은 prefix 최소화, 한 인스턴스당 5~10 트리플 정도만 추출하여 챕터에 보여줌 (전체 트리플 수십만 개를 다 보여주지 X).
각 챕터의 newConcepts를 시각적으로 가장 잘 보여주는 부분 그래프를 만든다.
{
"id": "ch02",
"title": "클래스와 인스턴스",
"nodes": [
{ "id": "poke:Pokemon", "label": "포켓몬", "type": "class" },
{ "id": "poke:피카츄", "label": "피카츄", "type": "instance" },
{ "id": "poke:라이츄", "label": "라이츄", "type": "instance" },
{ "id": "poke:파이리", "label": "파이리", "type": "instance" }
],
"edges": [
{ "source": "poke:피카츄", "target": "poke:Pokemon", "label": "type", "kind": "is-a" },
{ "source": "poke:라이츄", "target": "poke:Pokemon", "label": "type", "kind": "is-a" },
{ "source": "poke:파이리", "target": "poke:Pokemon", "label": "type", "kind": "is-a" }
],
"highlight": ["poke:Pokemon"],
"layoutHint": "breadthfirst"
}
| 챕터 영역 | 노드 수 | 엣지 수 |
|---|---|---|
| 1~4 (기초) | 5~12 | 5~15 |
| 5~9 (중급) | 15~30 | 20~40 |
| 10~13 (고급) | 30~80 | 50~150 |
| 14~15 (응용) | 50~150 | 100~300 |
[
{
"id": "rule-transitive-evolution",
"koLabel": "진화의 추이성",
"if": [["?a", "poke:evolvesTo", "?b"], ["?b", "poke:evolvesTo", "?c"]],
"then": [["?a", "poke:evolvesToEventually", "?c"]],
"koExplanation": "A가 B로 진화하고, B가 C로 진화하면, A는 결국 C로 진화한다고 말할 수 있어요."
},
{
"id": "rule-fire-type-pokemon",
"koLabel": "불꽃타입 포켓몬 자동 분류",
"if": [["?p", "rdf:type", "poke:Pokemon"], ["?p", "poke:hasType", "poke:type-fire"]],
"then": [["?p", "rdf:type", "poke:FireTypePokemon"]],
"koExplanation": "어떤 포켓몬이 불꽃 타입을 가지면, 그 포켓몬은 '불꽃타입 포켓몬' 클래스의 인스턴스예요."
},
{
"id": "rule-inverse-evolution",
"koLabel": "진화의 역관계",
"if": [["?a", "poke:evolvesTo", "?b"]],
"then": [["?b", "poke:evolvesFrom", "?a"]]
}
]
OWL 정의 예시를 schema.json에 함께 저장:
{
"iri": "poke:LegendaryPokemon",
"koLabel": "전설의 포켓몬",
"parent": "poke:Pokemon",
"owlDefinition": "Pokemon ⊓ (isLegendary value true)",
"koExplanation": "전설의 포켓몬은 '포켓몬'이면서 동시에 'isLegendary가 true인' 개체예요."
}
{
"iri": "poke:DualTypePokemon",
"koLabel": "듀얼 타입 포켓몬",
"owlDefinition": "Pokemon ⊓ (hasType min 2 Type)",
"koExplanation": "타입을 2개 이상 가진 포켓몬이에요."
}
학습자에게는 ⊓, ⊑ 같은 수학 기호와 함께 한국어 풀이를 항상 같이 보여준다.