{
"tool_response": {
"type": "update",
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/View\/semantic-explorer\/ontologie.php",
"content": "<?php ob_start(); ?>\n\n<nav class=\"breadcrumb\">\n <a href=\"\/\">Home<\/a> » <a href=\"\/explorer\">Explorer<\/a> » <a href=\"\/semantic-explorer\">Semantic Explorer<\/a> » Ontologie\n<\/nav>\n\n<h1>Ontologie<\/h1>\n<p>Klassifizierte Entitäten mit ihren Ontologie-Klassen und Verbindungen.<\/p>\n\n<div class=\"stats-grid\">\n <div class=\"stat-card stat-card--primary\">\n <span class=\"stat-card__value\"><?= $stats['total_classes'] ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Klassen<\/span>\n <\/div>\n <div class=\"stat-card stat-card--success\">\n <span class=\"stat-card__value\"><?= $stats['classified_entities'] ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Klassifizierte Entitäten<\/span>\n <\/div>\n <div class=\"stat-card\">\n <span class=\"stat-card__value\"><?= $totalCount ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Zuordnungen<\/span>\n <\/div>\n<\/div>\n\n<div class=\"filters\">\n <input type=\"search\" id=\"ontology-search\" class=\"form-input\" placeholder=\"Entität suchen...\" value=\"<?= htmlspecialchars($currentSearch ?? '') ?>\">\n <select id=\"filter-class\" class=\"form-select--inline\">\n <option value=\"\">Alle Klassen<\/option>\n <?php foreach ($classes ?? [] as $c): ?>\n <option value=\"<?= $c['id'] ?>\" <?= ($currentClass ?? '') == $c['id'] ? 'selected' : '' ?>>\n <?= htmlspecialchars($c['name']) ?> (<?= $c['entity_count'] ?>)\n <\/option>\n <?php endforeach; ?>\n <\/select>\n<\/div>\n\n<?php if (!empty($entities)): ?>\n<table id=\"ontology-table\" data-sortable>\n <thead>\n <tr>\n <th data-sort=\"entity_name\">Entität<\/th>\n <th data-sort=\"description\">Beschreibung<\/th>\n <th data-sort=\"class_name\">Klasse<\/th>\n <th data-sort=\"confidence\">Konfidenz<\/th>\n <th>Verbindungen<\/th>\n <\/tr>\n <\/thead>\n <tbody>\n <?php foreach ($entities as $e): ?>\n <tr>\n <td>\n <a href=\"\/semantic-explorer\/entitaeten\/<?= $e['entity_id'] ?>\">\n <strong><?= htmlspecialchars($e['entity_name']) ?><\/strong>\n <\/a>\n <br><span class=\"badge badge--small\"><?= htmlspecialchars($e['entity_type']) ?><\/span>\n <\/td>\n <td><?= htmlspecialchars(substr($e['description'] ?? '-', 0, 100)) ?><\/td>\n <td>\n <span class=\"badge badge--primary\"><?= htmlspecialchars($e['class_name']) ?><\/span>\n <\/td>\n <td>\n <?php\n $conf = (float) ($e['confidence'] ?? 0);\n $confClass = $conf >= 0.7 ? 'success' : ($conf >= 0.4 ? 'warning' : 'danger');\n ?>\n <span class=\"badge badge--<?= $confClass ?> badge--small\"><?= number_format($conf * 100, 0) ?>%<\/span>\n <\/td>\n <td>\n <?php if (!empty($e['relations'])): ?>\n <?php\n $rels = explode(', ', $e['relations']);\n foreach (array_slice($rels, 0, 3) as $rel):\n list($type, $target) = explode(':', $rel, 2);\n ?>\n <span class=\"badge badge--outline badge--small\" title=\"<?= htmlspecialchars($type) ?>\">\n <?= htmlspecialchars($target) ?>\n <\/span>\n <?php endforeach; ?>\n <?php if (count($rels) > 3): ?>\n <span class=\"text-muted\">+<?= count($rels) - 3 ?><\/span>\n <?php endif; ?>\n <?php else: ?>\n <span class=\"text-muted\">-<\/span>\n <?php endif; ?>\n <\/td>\n <\/tr>\n <?php endforeach; ?>\n <\/tbody>\n<\/table>\n\n<?php if (($totalPages ?? 1) > 1): ?>\n<div class=\"pagination\">\n <?php for ($i = 1; $i <= min($totalPages, 10); $i++): ?>\n <a href=\"?page=<?= $i ?>&search=<?= urlencode($currentSearch ?? '') ?>&class=<?= urlencode($currentClass ?? '') ?>\"\n class=\"<?= $i === ($currentPage ?? 1) ? 'active' : '' ?>\"><?= $i ?><\/a>\n <?php endfor; ?>\n<\/div>\n<?php endif; ?>\n\n<?php else: ?>\n<p class=\"empty-state\">Keine klassifizierten Entitäten gefunden. Führen Sie die Pipeline mit semantischer Analyse aus.<\/p>\n<?php endif; ?>\n\n<h2>Ontologie-Klassen<\/h2>\n<table data-sortable>\n <thead>\n <tr>\n <th>Klasse<\/th>\n <th>Beschreibung<\/th>\n <th>Entitäten<\/th>\n <th>Aktionen<\/th>\n <\/tr>\n <\/thead>\n <tbody>\n <?php foreach ($classes ?? [] as $c): ?>\n <tr>\n <td><strong><?= htmlspecialchars($c['name']) ?><\/strong><\/td>\n <td><?= htmlspecialchars(substr($c['description'] ?? '', 0, 80)) ?><\/td>\n <td><?= $c['entity_count'] ?><\/td>\n <td>\n <a href=\"?class=<?= $c['id'] ?>\" class=\"btn btn--small\">Anzeigen<\/a>\n <\/td>\n <\/tr>\n <?php endforeach; ?>\n <\/tbody>\n<\/table>\n\n<p class=\"links-bar\">\n <a href=\"\/semantic-explorer\">Zurück zum Explorer<\/a> |\n <a href=\"\/semantic-explorer\/taxonomie\">Taxonomie<\/a> |\n <a href=\"\/semantic-explorer\/semantik\">Semantik<\/a> |\n <a href=\"\/semantic-explorer\/graph\">Graph<\/a>\n<\/p>\n\n<script type=\"module\">\nimport { init } from '\/js\/components\/data-table.js';\n\nconst dataTable = init({\n clock: { now_epoch_ms_utc: () => Date.now() },\n logger: console,\n ui: {\n showMessage: (msg) => { console.log(msg.type + ': ' + msg.text); },\n disableFeature: (key) => { console.warn('Feature disabled: ' + key); },\n offerRetry: () => Promise.resolve(false)\n },\n runId: crypto.randomUUID()\n});\n\ndataTable.create('ontology-table', {\n searchInput: 'ontology-search',\n pageSize: 20,\n filters: {\n 'filter-class': 2\n }\n});\n<\/script>\n\n<?php $content = ob_get_clean(); ?>\n<?php require VIEW_PATH . '\/layout.php'; ?>\n",
"structuredPatch": [
{
"oldStart": 5,
"oldLines": 64,
"newStart": 5,
"newLines": 131,
"lines": [
" <\/nav>",
" ",
" <h1>Ontologie<\/h1>",
"-<p>Konzept-Klassen und deren Eigenschaften.<\/p>",
"+<p>Klassifizierte Entitäten mit ihren Ontologie-Klassen und Verbindungen.<\/p>",
" ",
" <div class=\"stats-grid\">",
" <div class=\"stat-card stat-card--primary\">",
" <span class=\"stat-card__value\"><?= $stats['total_classes'] ?? 0 ?><\/span>",
" <span class=\"stat-card__label\">Klassen<\/span>",
" <\/div>",
"- <div class=\"stat-card\">",
"- <span class=\"stat-card__value\"><?= $stats['root_classes'] ?? 0 ?><\/span>",
"- <span class=\"stat-card__label\">Hauptklassen<\/span>",
"- <\/div>",
" <div class=\"stat-card stat-card--success\">",
" <span class=\"stat-card__value\"><?= $stats['classified_entities'] ?? 0 ?><\/span>",
"- <span class=\"stat-card__label\">Klassifizierte Entitaeten<\/span>",
"+ <span class=\"stat-card__label\">Klassifizierte Entitäten<\/span>",
" <\/div>",
"+ <div class=\"stat-card\">",
"+ <span class=\"stat-card__value\"><?= $totalCount ?? 0 ?><\/span>",
"+ <span class=\"stat-card__label\">Zuordnungen<\/span>",
"+ <\/div>",
" <\/div>",
" ",
"-<?php if (!empty($classes)): ?>",
" <div class=\"filters\">",
"- <input type=\"search\" id=\"ontology-search\" class=\"form-input\" placeholder=\"Durchsuchen...\">",
"+ <input type=\"search\" id=\"ontology-search\" class=\"form-input\" placeholder=\"Entität suchen...\" value=\"<?= htmlspecialchars($currentSearch ?? '') ?>\">",
"+ <select id=\"filter-class\" class=\"form-select--inline\">",
"+ <option value=\"\">Alle Klassen<\/option>",
"+ <?php foreach ($classes ?? [] as $c): ?>",
"+ <option value=\"<?= $c['id'] ?>\" <?= ($currentClass ?? '') == $c['id'] ? 'selected' : '' ?>>",
"+ <?= htmlspecialchars($c['name']) ?> (<?= $c['entity_count'] ?>)",
"+ <\/option>",
"+ <?php endforeach; ?>",
"+ <\/select>",
" <\/div>",
" ",
"+<?php if (!empty($entities)): ?>",
" <table id=\"ontology-table\" data-sortable>",
" <thead>",
" <tr>",
"- <th data-sort=\"name\">Klasse<\/th>",
"+ <th data-sort=\"entity_name\">Entität<\/th>",
" <th data-sort=\"description\">Beschreibung<\/th>",
"- <th data-sort=\"entity_count\">Entitaeten<\/th>",
"- <th data-sort=\"subclass_count\">Unterklassen<\/th>",
"- <th>Eigenschaften<\/th>",
"+ <th data-sort=\"class_name\">Klasse<\/th>",
"+ <th data-sort=\"confidence\">Konfidenz<\/th>",
"+ <th>Verbindungen<\/th>",
" <\/tr>",
" <\/thead>",
" <tbody>",
"- <?php foreach ($classes as $c): ?>",
"+ <?php foreach ($entities as $e): ?>",
" <tr>",
"- <td><strong><?= htmlspecialchars($c['name']) ?><\/strong><\/td>",
"- <td><?= htmlspecialchars(substr($c['description'] ?? '', 0, 80)) ?><\/td>",
"- <td><?= $c['entity_count'] ?><\/td>",
"- <td><?= $c['subclass_count'] ?><\/td>",
" <td>",
"- <?php if (!empty($c['properties_decoded'])): ?>",
"- <code><?= htmlspecialchars(implode(', ', array_keys($c['properties_decoded']))) ?><\/code>",
"+ <a href=\"\/semantic-explorer\/entitaeten\/<?= $e['entity_id'] ?>\">",
"+ <strong><?= htmlspecialchars($e['entity_name']) ?><\/strong>",
"+ <\/a>",
"+ <br><span class=\"badge badge--small\"><?= htmlspecialchars($e['entity_type']) ?><\/span>",
"+ <\/td>",
"+ <td><?= htmlspecialchars(substr($e['description'] ?? '-', 0, 100)) ?><\/td>",
"+ <td>",
"+ <span class=\"badge badge--primary\"><?= htmlspecialchars($e['class_name']) ?><\/span>",
"+ <\/td>",
"+ <td>",
"+ <?php",
"+ $conf = (float) ($e['confidence'] ?? 0);",
"+ $confClass = $conf >= 0.7 ? 'success' : ($conf >= 0.4 ? 'warning' : 'danger');",
"+ ?>",
"+ <span class=\"badge badge--<?= $confClass ?> badge--small\"><?= number_format($conf * 100, 0) ?>%<\/span>",
"+ <\/td>",
"+ <td>",
"+ <?php if (!empty($e['relations'])): ?>",
"+ <?php",
"+ $rels = explode(', ', $e['relations']);",
"+ foreach (array_slice($rels, 0, 3) as $rel):",
"+ list($type, $target) = explode(':', $rel, 2);",
"+ ?>",
"+ <span class=\"badge badge--outline badge--small\" title=\"<?= htmlspecialchars($type) ?>\">",
"+ <?= htmlspecialchars($target) ?>",
"+ <\/span>",
"+ <?php endforeach; ?>",
"+ <?php if (count($rels) > 3): ?>",
"+ <span class=\"text-muted\">+<?= count($rels) - 3 ?><\/span>",
"+ <?php endif; ?>",
" <?php else: ?>",
"- -",
"+ <span class=\"text-muted\">-<\/span>",
" <?php endif; ?>",
" <\/td>",
" <\/tr>",
" <?php endforeach; ?>",
" <\/tbody>",
" <\/table>",
"+",
"+<?php if (($totalPages ?? 1) > 1): ?>",
"+<div class=\"pagination\">",
"+ <?php for ($i = 1; $i <= min($totalPages, 10); $i++): ?>",
"+ <a href=\"?page=<?= $i ?>&search=<?= urlencode($currentSearch ?? '') ?>&class=<?= urlencode($currentClass ?? '') ?>\"",
"+ class=\"<?= $i === ($currentPage ?? 1) ? 'active' : '' ?>\"><?= $i ?><\/a>",
"+ <?php endfor; ?>",
"+<\/div>",
"+<?php endif; ?>",
"+",
" <?php else: ?>",
"-<p class=\"empty-state\">Keine Ontologie-Klassen gefunden. Fuehren Sie die semantische Analyse aus.<\/p>",
"+<p class=\"empty-state\">Keine klassifizierten Entitäten gefunden. Führen Sie die Pipeline mit semantischer Analyse aus.<\/p>",
" <?php endif; ?>",
" ",
"+<h2>Ontologie-Klassen<\/h2>",
"+<table data-sortable>",
"+ <thead>",
"+ <tr>",
"+ <th>Klasse<\/th>",
"+ <th>Beschreibung<\/th>",
"+ <th>Entitäten<\/th>",
"+ <th>Aktionen<\/th>",
"+ <\/tr>",
"+ <\/thead>",
"+ <tbody>",
"+ <?php foreach ($classes ?? [] as $c): ?>",
"+ <tr>",
"+ <td><strong><?= htmlspecialchars($c['name']) ?><\/strong><\/td>",
"+ <td><?= htmlspecialchars(substr($c['description'] ?? '', 0, 80)) ?><\/td>",
"+ <td><?= $c['entity_count'] ?><\/td>",
"+ <td>",
"+ <a href=\"?class=<?= $c['id'] ?>\" class=\"btn btn--small\">Anzeigen<\/a>",
"+ <\/td>",
"+ <\/tr>",
"+ <?php endforeach; ?>",
"+ <\/tbody>",
"+<\/table>",
"+",
" <p class=\"links-bar\">",
"- <a href=\"\/semantic-explorer\">Zurueck zum Explorer<\/a> |",
"+ <a href=\"\/semantic-explorer\">Zurück zum Explorer<\/a> |",
" <a href=\"\/semantic-explorer\/taxonomie\">Taxonomie<\/a> |",
"- <a href=\"\/semantic-explorer\/entitaeten\">Entitaeten<\/a>",
"+ <a href=\"\/semantic-explorer\/semantik\">Semantik<\/a> |",
"+ <a href=\"\/semantic-explorer\/graph\">Graph<\/a>",
" <\/p>",
" ",
" <script type=\"module\">"
]
},
{
"oldStart": 81,
"oldLines": 7,
"newStart": 148,
"newLines": 10,
"lines": [
" ",
" dataTable.create('ontology-table', {",
" searchInput: 'ontology-search',",
"- pageSize: 20",
"+ pageSize: 20,",
"+ filters: {",
"+ 'filter-class': 2",
"+ }",
" });",
" <\/script>",
" "
]
}
],
"originalFile": "<?php ob_start(); ?>\n\n<nav class=\"breadcrumb\">\n <a href=\"\/\">Home<\/a> » <a href=\"\/explorer\">Explorer<\/a> » <a href=\"\/semantic-explorer\">Semantic Explorer<\/a> » Ontologie\n<\/nav>\n\n<h1>Ontologie<\/h1>\n<p>Konzept-Klassen und deren Eigenschaften.<\/p>\n\n<div class=\"stats-grid\">\n <div class=\"stat-card stat-card--primary\">\n <span class=\"stat-card__value\"><?= $stats['total_classes'] ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Klassen<\/span>\n <\/div>\n <div class=\"stat-card\">\n <span class=\"stat-card__value\"><?= $stats['root_classes'] ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Hauptklassen<\/span>\n <\/div>\n <div class=\"stat-card stat-card--success\">\n <span class=\"stat-card__value\"><?= $stats['classified_entities'] ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Klassifizierte Entitaeten<\/span>\n <\/div>\n<\/div>\n\n<?php if (!empty($classes)): ?>\n<div class=\"filters\">\n <input type=\"search\" id=\"ontology-search\" class=\"form-input\" placeholder=\"Durchsuchen...\">\n<\/div>\n\n<table id=\"ontology-table\" data-sortable>\n <thead>\n <tr>\n <th data-sort=\"name\">Klasse<\/th>\n <th data-sort=\"description\">Beschreibung<\/th>\n <th data-sort=\"entity_count\">Entitaeten<\/th>\n <th data-sort=\"subclass_count\">Unterklassen<\/th>\n <th>Eigenschaften<\/th>\n <\/tr>\n <\/thead>\n <tbody>\n <?php foreach ($classes as $c): ?>\n <tr>\n <td><strong><?= htmlspecialchars($c['name']) ?><\/strong><\/td>\n <td><?= htmlspecialchars(substr($c['description'] ?? '', 0, 80)) ?><\/td>\n <td><?= $c['entity_count'] ?><\/td>\n <td><?= $c['subclass_count'] ?><\/td>\n <td>\n <?php if (!empty($c['properties_decoded'])): ?>\n <code><?= htmlspecialchars(implode(', ', array_keys($c['properties_decoded']))) ?><\/code>\n <?php else: ?>\n -\n <?php endif; ?>\n <\/td>\n <\/tr>\n <?php endforeach; ?>\n <\/tbody>\n<\/table>\n<?php else: ?>\n<p class=\"empty-state\">Keine Ontologie-Klassen gefunden. Fuehren Sie die semantische Analyse aus.<\/p>\n<?php endif; ?>\n\n<p class=\"links-bar\">\n <a href=\"\/semantic-explorer\">Zurueck zum Explorer<\/a> |\n <a href=\"\/semantic-explorer\/taxonomie\">Taxonomie<\/a> |\n <a href=\"\/semantic-explorer\/entitaeten\">Entitaeten<\/a>\n<\/p>\n\n<script type=\"module\">\nimport { init } from '\/js\/components\/data-table.js';\n\nconst dataTable = init({\n clock: { now_epoch_ms_utc: () => Date.now() },\n logger: console,\n ui: {\n showMessage: (msg) => { console.log(msg.type + ': ' + msg.text); },\n disableFeature: (key) => { console.warn('Feature disabled: ' + key); },\n offerRetry: () => Promise.resolve(false)\n },\n runId: crypto.randomUUID()\n});\n\ndataTable.create('ontology-table', {\n searchInput: 'ontology-search',\n pageSize: 20\n});\n<\/script>\n\n<?php $content = ob_get_clean(); ?>\n<?php require VIEW_PATH . '\/layout.php'; ?>\n"
}
}