Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
9dd3e1e
backup
Jul 29, 2026
568a627
Adding AI.xml so that it can be browsed online during development
Jul 29, 2026
27fcccc
Committing files for the review with Willy
Aug 3, 2026
a7d7d49
Updated after the discussion with Willy
Aug 4, 2026
01b91c4
Adding support for Vendor-specific extensions
Aug 4, 2026
78da1f3
Adding the configurability to sign the metadata for the AI service
Aug 4, 2026
a523c65
Including part of Willy's feedback and initial completion
Aug 4, 2026
ead8581
Cleanup
Aug 4, 2026
015bcce
forgetten fix
Aug 4, 2026
2b4f6db
Add background and motivation for ONVIF AI service
willysagefalk Aug 5, 2026
6a830e1
Reorganizing the references section
Aug 5, 2026
1d9d0c4
aligning namespaces with pre-exsisting ones
Aug 5, 2026
fa29cde
Updated in preparation for the WG AI telco on Aug 12, 2026
Aug 11, 2026
f6f1b9e
Remove hardcoded references
Aug 11, 2026
13c28eb
Replacing svg with png for online reading
Aug 11, 2026
933dee8
Removing unnecessary hard-coded section numbers
Aug 12, 2026
06c3665
Reanming AI -> agentic
Aug 12, 2026
0991c85
Enable the yaml rendered for agent.yaml
Aug 12, 2026
084f769
Removing now duplicated linkml source from te service document
Aug 12, 2026
ed57eea
Add viewer for specs
Aug 12, 2026
f3aa5fe
Removing wrong/obsolete references
Aug 12, 2026
2b59f77
completing "ai" -> "agentic" transition
Aug 12, 2026
9747508
Including feedback from Hans
Sep 8, 2026
95cc414
Including feedback from F2F meeting
Sep 9, 2026
6dc98d7
Including modifications after F2F meeting in Prague
Sep 11, 2026
c1f67a1
backup
Sep 15, 2026
b418e13
Updated specs
Sep 15, 2026
312ab8e
Fix for the URIs. ugly, but it works
Sep 15, 2026
ad86335
add missing comment
Sep 15, 2026
0190669
Enhancing the list of files
Sep 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4,347 changes: 4,347 additions & 0 deletions doc/Agentic.xml

Large diffs are not rendered by default.

256 changes: 251 additions & 5 deletions doc/Security.xml

Large diffs are not rendered by default.

14 changes: 14 additions & 0 deletions doc/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,20 @@ <h2>Document preview</h2>
</tr>
<tr>
<td></td>
<td><a href="Agentic.xml">Agentic</a></td>
<td><a href="yaml/agentic.yaml">agentic.yaml</a></td>
<td>
<ul>
<li><a href="yaml/agentic/base.yaml">base.yaml</a></li>
<li><a href="yaml/agentic/common.yaml">common.yaml</a></li>
<li><a href="yaml/agentic/enums.yaml">enums.yaml</a></li>
<li><a href="yaml/agentic/signature.yaml">signature.yaml</a></li>
<li><a href="yaml/agentic/time.yaml">time.yaml</a></li>
</ul>
</td>
</tr>
<tr>
<td></td>
<td><a href="Analytics.xml">Analytics</a></td>
<td><a href="../wsdl/ver20/analytics/wsdl/analytics.wsdl">analytics.wsdl</a></td>
<td><a href="../wsdl/ver20/analytics/rules.xsd">rules.xsd</a>, <a href="../wsdl/ver20/analytics/humanbody.xsd">humanbody.xsd</a>, <a href="../wsdl/ver20/analytics/humanface.xsd">humanface.xsd</a></td>
Expand Down
115 changes: 115 additions & 0 deletions doc/linkml.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
<?php
$yamlParam = isset($_GET['yaml']) ? basename($_GET['yaml']) : '';
$filePath = __DIR__ . '/../yaml/' . $yamlParam;

if (empty($yamlParam) || !file_exists($filePath)) {
http_response_code(404);
echo "File LinkML non trovato.";
exit;
}
$safeYamlUrl = htmlspecialchars($yamlParam, ENT_QUOTES, 'UTF-8');
?>
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>LinkML Schema Viewer</title>
<!-- Parser YAML e Renderer di Diagrammi -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/js-yaml/4.1.0/js-yaml.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
<style>
body { font-family: system-ui, -apple-system, sans-serif; margin: 20px; background: #f8f9fa; color: #333; }
h1 { border-bottom: 2px solid #0066cc; padding-bottom: 8px; color: #0066cc; }
.card { background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); margin-bottom: 20px; }
table { width: 100%; border-collapse: collapse; margin-top: 10px; }
th, td { border: 1px solid #ddd; padding: 8px 12px; text-align: left; }
th { background: #f1f3f5; }
.mermaid { text-align: center; }
</style>
</head>
<body>

<h1>LinkML Schema: <?= $safeYamlUrl ?></h1>

<div class="card">
<h2>Diagramma delle Classi</h2>
<div id="mermaid-diagram" class="mermaid">Caricamento diagramma...</div>
</div>

<div class="card">
<h2>Dettaglio Classi e Attributi</h2>
<div id="schema-details"></div>
</div>

<script>
mermaid.initialize({ startOnLoad: false });

// Carica il file LinkML direttamente dal server
fetch('../yaml/<?= $safeYamlUrl ?>')
.then(response => response.text())
.then(yamlText => {
const schema = jsyaml.load(yamlText);
renderDiagram(schema);
renderTables(schema);
})
.catch(err => {
document.body.innerHTML = '<h3>Errore durante il caricamento del file LinkML.</h3>';
console.error(err);
});

function renderDiagram(schema) {
if (!schema.classes) return;
let mermaidGraph = 'classDiagram\n';

for (const [className, classDef] of Object.entries(schema.classes)) {
mermaidGraph += ` class ${className} {\n`;
const slots = classDef.slots || (classDef.attributes ? Object.keys(classDef.attributes) : []);
slots.forEach(slot => {
mermaidGraph += ` +${slot}\n`;
});
mermaidGraph += ` }\n`;

if (classDef.is_a) {
mermaidGraph += ` ${classDef.is_a} <|-- ${className}\n`;
}
}

const container = document.getElementById('mermaid-diagram');
container.removeAttribute('data-processed');
container.innerHTML = mermaidGraph;
mermaid.run({ nodes: [container] });
}

function renderTables(schema) {
const detailsDiv = document.getElementById('schema-details');
if (!schema.classes) {
detailsDiv.innerHTML = '<p>Nessuna classe trovata nello schema.</p>';
return;
}

let html = '';
for (const [className, classDef] of Object.entries(schema.classes)) {
html += `<h3>Classe: ${className}</h3>`;
if (classDef.description) html += `<p><em>${classDef.description}</em></p>`;

html += `<table><thead><tr><th>Campo (Slot)</th><th>Tipo / Range</th></tr></thead><tbody>`;

const slots = classDef.attributes || {};
if (classDef.slots) {
classDef.slots.forEach(s => {
const range = (schema.slots && schema.slots[s] && schema.slots[s].range) ? schema.slots[s].range : 'string';
html += `<tr><td><strong>${s}</strong></td><td>${range}</td></tr>`;
});
}
for (const [attrName, attrDef] of Object.entries(slots)) {
html += `<tr><td><strong>${attrName}</strong></td><td>${attrDef.range || 'string'}</td></tr>`;
}

html += `</tbody></table><br>`;
}
detailsDiv.innerHTML = html;
}
</script>
</body>
</html>
Binary file added doc/media/AI/classes.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
100 changes: 100 additions & 0 deletions doc/media/AI/stack_overview.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading