Commit f7d00dee authored by Matthias Betz's avatar Matthias Betz
Browse files

upload of CityDoctor2 Documentation

parent cd022528
Pipeline #7225 passed with stages
in 12 seconds
<!DOCTYPE html>
<html>
<!doctype html>
<html lang="de" class="no-js">
<head>
<meta charset="utf-8">
<meta name="generator" content="GitLab Pages">
<title>Home</title>
<link rel="stylesheet" href="style.css">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="next" href="requiredSoftware/">
<link rel="icon" href="img/citydoctor_logo.png">
<meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.0.6">
<title>CityDoctor2</title>
<link rel="stylesheet" href="assets/stylesheets/main.558e4712.min.css">
<link rel="stylesheet" href="assets/stylesheets/palette.2505c338.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="https://unpkg.com/mermaid/dist/mermaid.css">
<script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body>
<div id="topbar">
<div id="menu" class="navbar"></div>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="red" data-md-color-accent="">
<script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#citydoctor2" class="md-skip">
Zum Inhalt
</a>
</div>
<div data-md-component="announce">
</div>
<div class="content">
<h1 id='projectname'></h1> <!--Projektname kommt aus settings.js, hier nichts einfügen-->
<!-- ÄNDERUNGEN NUR NACH DIESER ZEILE -->
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Kopfzeile">
<a href="." title="CityDoctor2" class="md-header__button md-logo" aria-label="CityDoctor2" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
CityDoctor2
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
CityDoctor2
</span>
</div>
</div>
</div>
<!-- TODO Blindtext anpassen: -->
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="red" data-md-color-accent="" aria-label="Dunkelmodus verwenden" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Dunkelmodus verwenden" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="" data-md-color-accent="" aria-label="Hellen Modus verwenden" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Hellen Modus verwenden" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
</form>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque pellentesque diam ipsum, nec ultricies sem mollis et. Phasellus porttitor nec felis quis ultricies. In venenatis faucibus nisl sed facilisis. Cras sapien nibh, dignissim at eros quis, commodo lobortis eros. Sed a massa eleifend, dictum elit at, blandit magna. Nullam auctor enim nec orci luctus sagittis. Nunc blandit quam nec laoreet egestas. Nulla feugiat nisl lacus, a viverra nisi hendrerit vitae. In nibh arcu, sodales in enim tincidunt, tempus imperdiet ex. Aliquam fermentum augue magna, vel accumsan augue consequat et. Vestibulum id interdum orci, a aliquam sapien. Vivamus eu ipsum sollicitudin, aliquet arcu ut, ornare massa. Suspendisse tincidunt lectus a odio ultrices interdum. Praesent vitae sodales urna, vitae sagittis ex. Vivamus tincidunt nisi ultrices lectus dapibus, at placerat nisl elementum. Fusce cursus, sapien in tincidunt pellentesque, mi erat mollis nibh, ut maximus tortor magna vitae nibh.
</p><p>
Donec aliquam lacus ut tortor porttitor volutpat. Sed aliquet metus vel ante tempor suscipit. Sed quis ipsum et nibh vehicula fermentum. Aliquam non porta ipsum. Proin interdum tincidunt metus, id venenatis lectus elementum id. Fusce eget velit erat. Aliquam non risus consequat arcu vulputate ultricies.
</p><p>
Integer fermentum, velit at elementum fringilla, tortor ante auctor nisi, eu semper tortor ante et dui. Sed posuere odio eu mi sagittis fringilla. Sed enim risus, tempor sed feugiat et, posuere sed quam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam dapibus sodales orci a vestibulum. Ut scelerisque eros non velit pulvinar porttitor. Mauris lobortis dolor a nisl aliquam, vel dictum justo porttitor. Proin finibus, lectus quis commodo elementum, lectus sapien blandit purus, id finibus nisl arcu eget massa. In ut orci sit amet eros facilisis imperdiet ac a felis. Donec ultricies posuere erat sit amet ullamcorper. Cras eget metus sit amet risus molestie venenatis. Nulla venenatis dui sed aliquam volutpat. Duis placerat purus nibh, vitae eleifend lacus pretium et.
</p><p>
Suspendisse porta sit amet purus vel interdum. Sed nibh neque, semper nec venenatis in, aliquam ut ante. Pellentesque a viverra nunc, sit amet luctus nisl. Aliquam quis nulla sed est viverra iaculis. Nullam sodales mi sed sodales egestas. Proin in sollicitudin ipsum. Nunc sem urna, vulputate eu neque sed, aliquet faucibus erat. Ut luctus, magna sed dictum congue, metus nisi aliquet enim, vitae euismod dui lectus id sapien. Nunc euismod orci nulla. Vestibulum congue id neque eget ultricies. Donec hendrerit justo ex, sit amet vestibulum massa consectetur vel. Etiam eu tellus eu magna vestibulum iaculis. Curabitur vulputate elit fringilla purus pharetra rutrum. Vivamus facilisis pharetra fermentum. Quisque sodales, ex vel dignissim viverra, erat velit convallis dolor, at sagittis justo enim in sem. Curabitur at dignissim turpis.
</p><p>
Cras volutpat, augue facilisis facilisis ullamcorper, est mi finibus nisl, nec euismod felis diam nec ligula. Suspendisse aliquam porta purus. Duis sit amet lacus quis ipsum sagittis lacinia in non metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam a magna sit amet erat laoreet varius. Nulla ac ipsum lacus. Phasellus nec nisi vel sem mattis lacinia. Nam ultrices dignissim nibh, sit amet luctus odio luctus in. Aliquam fringilla eros non velit pretium rhoncus. Ut purus arcu, ornare sit amet ullamcorper ut, iaculis vel dolor.
</p>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Suche" placeholder="Suche" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Suche">
<button type="reset" class="md-search__icon md-icon" title="Zurücksetzen" aria-label="Zurücksetzen" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Suche wird initialisiert
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="." title="CityDoctor2" class="md-nav__button md-logo" aria-label="CityDoctor2" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
CityDoctor2
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<!-- KEINE ÄNDERUNGEN NACH DIESER ZEILE -->
<script src="settings.js"> </script>
</body>
</html>
<a href="." class="md-nav__link md-nav__link--active">
CityDoctor2
</a>
</li>
<li class="md-nav__item">
<a href="requiredSoftware/" class="md-nav__link">
Installation
</a>
</li>
<li class="md-nav__item">
<a href="firstRun/" class="md-nav__link">
Erster Start
</a>
</li>
<li class="md-nav__item">
<a href="userInterface/" class="md-nav__link">
Nutzeroberfläche
</a>
</li>
<li class="md-nav__item">
<a href="validationPlan/" class="md-nav__link">
Prüfplan
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_6" type="checkbox" id="__nav_6" >
<label class="md-nav__link" for="__nav_6" tabindex="0" aria-expanded="false">
Anforderungen
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Anforderungen" data-md-level="1">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Anforderungen
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="basic/" class="md-nav__link">
Grundbegriffe
</a>
</li>
<li class="md-nav__item">
<a href="requirements/" class="md-nav__link">
Übersicht
</a>
</li>
<li class="md-nav__item">
<a href="schemaRequirements/" class="md-nav__link">
Schemaanforderungen
</a>
</li>
<li class="md-nav__item">
<a href="geometric/" class="md-nav__link">
Geometrische Anforderungen
</a>
</li>
<li class="md-nav__item">
<a href="semantic/" class="md-nav__link">
Semantische Anforderungen
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_6_6" type="checkbox" id="__nav_6_6" >
<label class="md-nav__link" for="__nav_6_6" tabindex="0" aria-expanded="false">
Details
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Details" data-md-level="2">
<label class="md-nav__title" for="__nav_6_6">
<span class="md-nav__icon md-icon"></span>
Details
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="R_GE_R_TOO_FEW_POINTS/" class="md-nav__link">
R_TOO_FEW_POINTS
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_R_CONSECUTIVE_POINTS_SAME/" class="md-nav__link">
R_CONSECUTIVE_POINTS_SAME
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_R_NOT_CLOSED/" class="md-nav__link">
R_RING_NOT_CLOSED
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_R_SELF_INTERSECTION/" class="md-nav__link">
R_RING_SELF_INTERSECTION
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_R_COLLAPSED_TO_LINE/" class="md-nav__link">
R_COLLAPSED_TO_LINE
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_P_INTERSECTING_RINGS/" class="md-nav__link">
P_INTERSECTING_RINGS
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_P_NON_PLANAR/" class="md-nav__link">
P_NON_PLANAR
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_P_INTERIOR_DISCONNECTED/" class="md-nav__link">
P_INTERIOR_DISCONNECTED
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_P_HOLE_OUTSIDE/" class="md-nav__link">
P_HOLE_OUTSIDE
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_P_INNER_RINGS_NESTED/" class="md-nav__link">
P_INNER_RINGS_NESTED
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_P_ORIENTATION_RINGS_SAME/" class="md-nav__link">
P_ORIENTATION_RINGS_SAME
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_MS/" class="md-nav__link">
MULTI_SURFACE
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_S_TOO_FEW_POLYGONS/" class="md-nav__link">
S_TOO_FEW_POLYGONS
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_S_NOT_CLOSED/" class="md-nav__link">
S_NOT_CLOSED
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_S_NON_MANIFOLD_VERTEX/" class="md-nav__link">
S_NON_MANIFOLD_VERTEX
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_S_NON_MANIFOLD_EDGE/" class="md-nav__link">
S_NON_MANIFOLD_EDGE
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_S_MULTIPLE_CONNECTED_COMPONENTS/" class="md-nav__link">
S_MULTIPLE_CONNECTED_COMPONENTS
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_S_SELF_INTERSECTION/" class="md-nav__link">
S_SELF_INTERSECTION
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_S_POLYGON_WRONG_ORIENTATION/" class="md-nav__link">
S_POLYGON_WRONG_ORIENTATION
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION/" class="md-nav__link">
S_ALL_POLYGONS_WRONG_ORIENTATION
</a>
</li>
<li class="md-nav__item">
<a href="R_GE_SO/" class="md-nav__link">
SOLID
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Inhaltsverzeichnis">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="citydoctor2">CityDoctor2<a class="headerlink" href="#citydoctor2" title="Permanent link">&para;</a></h1>
<p>CityDoctor2 ist eine Qualitätsprüfungssoftware für 3D Stadtmodelle im CityGML format. CityDoctor kann CityGML 1/2 Dokumente einlesen und seit Version 3.12 kann auch eingeschränkt CityGML 3 gelesen werden. Alle Prüfergebnisse können in xml oder pdf Form ausgegeben werden. Zusätzlich implementiert CityDoctor die <a href="https://transfer.hft-stuttgart.de/gitlab/citydoctor/qualityade">QualityADE</a> um Prüfergebnisse direkt in CityGML zu speichern.</p>
<p><img alt="examplePicture" src="img/checked.png" /></p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": ".", "features": ["content.code.annotate"], "search": "assets/javascripts/workers/search.e5c33ebb.min.js", "translations": {"clipboard.copied": "In Zwischenablage kopiert", "clipboard.copy": "In Zwischenablage kopieren", "search.result.more.one": "1 weiteres Suchergebnis auf dieser Seite", "search.result.more.other": "# weitere Suchergebnisse auf dieser Seite", "search.result.none": "Keine Suchergebnisse", "search.result.one": "1 Suchergebnis", "search.result.other": "# Suchergebnisse", "search.result.placeholder": "Suchbegriff eingeben", "search.result.term.missing": "Es fehlt", "select.version": "Version ausw\u00e4hlen"}}</script>
<script src="assets/javascripts/bundle.51d95adb.min.js"></script>
<script src="https://unpkg.com/mermaid/dist/mermaid.min.js"></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="generator" content="GitLab Pages">
<title>Aktuelles</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="topbar">
<div id="menu" class="navbar"></div>
</div>
<div class="content">
<h1 id='projectname'></h1> <!--Projektname kommt aus settings.js, hier nichts einfügen-->
<h2> Kontakt: </h2>
<!-- ÄNDERUNGEN NUR NACH DIESER ZEILE -->
<!-- TODO Daten anpasen -->
<div class="news">
<div class="header">
Verantwortliche Person:
</div>
<div class="text">
<p>
Max Mustermann
</p>
<p>
Bei Fragen zum Projekt kontaktieren Sie <a href="mailto:max.mustermann@hft-stuttgart.de">max.mustermann@hft-stuttgart.de</a>
</p>
</div>
</div>
<!-- KEINE ÄNDERUNGEN NACH DIESER ZEILE -->
</div>
<script src="settings.js"> </script>
</body>
</html>
<!doctype html>
<html lang="de" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="prev" href="..">
<link rel="next" href="../firstRun/">
<link rel="icon" href="../img/citydoctor_logo.png">
<meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.0.6">
<title>Installation - CityDoctor2</title>
<link rel="stylesheet" href="../assets/stylesheets/main.558e4712.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.2505c338.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="https://unpkg.com/mermaid/dist/mermaid.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="red" data-md-color-accent="">
<script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#benotigte-software" class="md-skip">
Zum Inhalt
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Kopfzeile">
<a href=".." title="CityDoctor2" class="md-header__button md-logo" aria-label="CityDoctor2" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
CityDoctor2
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Installation
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="red" data-md-color-accent="" aria-label="Dunkelmodus verwenden" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Dunkelmodus verwenden" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="" data-md-color-accent="" aria-label="Hellen Modus verwenden" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Hellen Modus verwenden" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
</form>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Suche" placeholder="Suche" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Suche">
<button type="reset" class="md-search__icon md-icon" title="Zurücksetzen" aria-label="Zurücksetzen" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Suche wird initialisiert
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="CityDoctor2" class="md-nav__button md-logo" aria-label="CityDoctor2" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
CityDoctor2
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
CityDoctor2
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
Installation
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
Installation
</a>
<nav class="md-nav md-nav--secondary" aria-label="Inhaltsverzeichnis">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Inhaltsverzeichnis
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#java" class="md-nav__link">
Java
</a>
</li>
<li class="md-nav__item">
<a href="#citydoctor2" class="md-nav__link">
CityDoctor2
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../firstRun/" class="md-nav__link">
Erster Start
</a>
</li>
<li class="md-nav__item">
<a href="../userInterface/" class="md-nav__link">
Nutzeroberfläche
</a>
</li>
<li class="md-nav__item">
<a href="../validationPlan/" class="md-nav__link">
Prüfplan
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_6" type="checkbox" id="__nav_6" >
<label class="md-nav__link" for="__nav_6" tabindex="0" aria-expanded="false">
Anforderungen
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Anforderungen" data-md-level="1">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Anforderungen
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../basic/" class="md-nav__link">
Grundbegriffe
</a>
</li>
<li class="md-nav__item">
<a href="../requirements/" class="md-nav__link">
Übersicht
</a>
</li>
<li class="md-nav__item">
<a href="../schemaRequirements/" class="md-nav__link">
Schemaanforderungen
</a>
</li>
<li class="md-nav__item">
<a href="../geometric/" class="md-nav__link">
Geometrische Anforderungen
</a>
</li>
<li class="md-nav__item">
<a href="../semantic/" class="md-nav__link">
Semantische Anforderungen
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_6_6" type="checkbox" id="__nav_6_6" >
<label class="md-nav__link" for="__nav_6_6" tabindex="0" aria-expanded="false">
Details
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Details" data-md-level="2">
<label class="md-nav__title" for="__nav_6_6">
<span class="md-nav__icon md-icon"></span>
Details
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../R_GE_R_TOO_FEW_POINTS/" class="md-nav__link">
R_TOO_FEW_POINTS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_CONSECUTIVE_POINTS_SAME/" class="md-nav__link">
R_CONSECUTIVE_POINTS_SAME
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_NOT_CLOSED/" class="md-nav__link">
R_RING_NOT_CLOSED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_SELF_INTERSECTION/" class="md-nav__link">
R_RING_SELF_INTERSECTION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_COLLAPSED_TO_LINE/" class="md-nav__link">
R_COLLAPSED_TO_LINE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INTERSECTING_RINGS/" class="md-nav__link">
P_INTERSECTING_RINGS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_NON_PLANAR/" class="md-nav__link">
P_NON_PLANAR
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INTERIOR_DISCONNECTED/" class="md-nav__link">
P_INTERIOR_DISCONNECTED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_HOLE_OUTSIDE/" class="md-nav__link">
P_HOLE_OUTSIDE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INNER_RINGS_NESTED/" class="md-nav__link">
P_INNER_RINGS_NESTED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_ORIENTATION_RINGS_SAME/" class="md-nav__link">
P_ORIENTATION_RINGS_SAME
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_MS/" class="md-nav__link">
MULTI_SURFACE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_TOO_FEW_POLYGONS/" class="md-nav__link">
S_TOO_FEW_POLYGONS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NOT_CLOSED/" class="md-nav__link">
S_NOT_CLOSED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NON_MANIFOLD_VERTEX/" class="md-nav__link">
S_NON_MANIFOLD_VERTEX
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NON_MANIFOLD_EDGE/" class="md-nav__link">
S_NON_MANIFOLD_EDGE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_MULTIPLE_CONNECTED_COMPONENTS/" class="md-nav__link">
S_MULTIPLE_CONNECTED_COMPONENTS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_SELF_INTERSECTION/" class="md-nav__link">
S_SELF_INTERSECTION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_POLYGON_WRONG_ORIENTATION/" class="md-nav__link">
S_POLYGON_WRONG_ORIENTATION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION/" class="md-nav__link">
S_ALL_POLYGONS_WRONG_ORIENTATION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_SO/" class="md-nav__link">
SOLID
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Inhaltsverzeichnis">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Inhaltsverzeichnis
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#java" class="md-nav__link">
Java
</a>
</li>
<li class="md-nav__item">
<a href="#citydoctor2" class="md-nav__link">
CityDoctor2
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="benotigte-software">Benötigte Software<a class="headerlink" href="#benotigte-software" title="Permanent link">&para;</a></h1>
<h2 id="java">Java<a class="headerlink" href="#java" title="Permanent link">&para;</a></h2>
<p>Vor der CityDoctor Version 3.12.x wird Java 8 entweder als JDK oder als JRE benötigt. Ab der Version 3.12.x wird Java 17 benötigt.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Es wichtig, dass die installierte Java Version die JavaFX Bibliotheken mit einschließt. Diese werden für die grafische Oberfläche benötigt.</p>
</div>
<p><a href="https://bell-sw.com/libericajdk/">Die Liberica JRE oder JDK</a> hat sich für einen Einsatz mit CityDoctor bewährt.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Die Liberica Distribution ist zu 100% frei und OpenSource.</p>
</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Für die Entwicklung mit CityDoctor wird eine JDK benötigt.</p>
</div>
<h2 id="citydoctor2">CityDoctor2<a class="headerlink" href="#citydoctor2" title="Permanent link">&para;</a></h2>
<p>CityDoctor kann von verschiedenen Seiten heruntergeladen werden. Die aktuellste Stelle ist ein <a href="https://gitlab.com/volkercoors/CiD4Sim/-/tree/master/CityDoctorExtension">gitlab Repository</a>. Alternativ werden Releases auch auf der <a href="https://projekt.bht-berlin.de/citydoctor2/downloads/">CityDoctor Homepage der BHT</a> gelistet. Es gibt dabei immer zwei Versionen:</p>
<ul>
<li><strong>CityDoctorGUI-3.x.x.zip:</strong> Das ist die grafische Oberfläche inklusive der Prüfungen. Geeignet für den Endnutzer auf einem Desktop PC.</li>
<li><strong>CityDoctorValidation-3.x.x.zip:</strong> Das ist die Batch-Version die für die Integration in Servern oder anderen bestehenden Systemen geeignet ist und hat keine grafische Oberfläche sondern arbeitet Dateibasiert als Prozess.</li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Es gibt manchmal Spezialversionen die Testweise erstellt worden sind um verschiedene Auslieferungsmöglichkeiten zu testen. Bsp: CityDoctorGUI-x.x.x-win.zip beinhaltet die JavaFX Bibliotheken sodass eine Java Umgebung ohne JavaFX auch verwendet werden kann.</p>
</div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["content.code.annotate"], "search": "../assets/javascripts/workers/search.e5c33ebb.min.js", "translations": {"clipboard.copied": "In Zwischenablage kopiert", "clipboard.copy": "In Zwischenablage kopieren", "search.result.more.one": "1 weiteres Suchergebnis auf dieser Seite", "search.result.more.other": "# weitere Suchergebnisse auf dieser Seite", "search.result.none": "Keine Suchergebnisse", "search.result.one": "1 Suchergebnis", "search.result.other": "# Suchergebnisse", "search.result.placeholder": "Suchbegriff eingeben", "search.result.term.missing": "Es fehlt", "select.version": "Version ausw\u00e4hlen"}}</script>
<script src="../assets/javascripts/bundle.51d95adb.min.js"></script>
<script src="https://unpkg.com/mermaid/dist/mermaid.min.js"></script>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html lang="de" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="prev" href="../basic/">
<link rel="next" href="../schemaRequirements/">
<link rel="icon" href="../img/citydoctor_logo.png">
<meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.0.6">
<title>Übersicht - CityDoctor2</title>
<link rel="stylesheet" href="../assets/stylesheets/main.558e4712.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.2505c338.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="https://unpkg.com/mermaid/dist/mermaid.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="red" data-md-color-accent="">
<script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#anforderungen-und-prufungen-fur-die-validierung-von-citygml-modellen" class="md-skip">
Zum Inhalt
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Kopfzeile">
<a href=".." title="CityDoctor2" class="md-header__button md-logo" aria-label="CityDoctor2" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
CityDoctor2
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Übersicht
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="red" data-md-color-accent="" aria-label="Dunkelmodus verwenden" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Dunkelmodus verwenden" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="" data-md-color-accent="" aria-label="Hellen Modus verwenden" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Hellen Modus verwenden" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
</form>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Suche" placeholder="Suche" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Suche">
<button type="reset" class="md-search__icon md-icon" title="Zurücksetzen" aria-label="Zurücksetzen" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Suche wird initialisiert
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="CityDoctor2" class="md-nav__button md-logo" aria-label="CityDoctor2" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
CityDoctor2
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
CityDoctor2
</a>
</li>
<li class="md-nav__item">
<a href="../requiredSoftware/" class="md-nav__link">
Installation
</a>
</li>
<li class="md-nav__item">
<a href="../firstRun/" class="md-nav__link">
Erster Start
</a>
</li>
<li class="md-nav__item">
<a href="../userInterface/" class="md-nav__link">
Nutzeroberfläche
</a>
</li>
<li class="md-nav__item">
<a href="../validationPlan/" class="md-nav__link">
Prüfplan
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_6" type="checkbox" id="__nav_6" checked>
<label class="md-nav__link" for="__nav_6" tabindex="0" aria-expanded="true">
Anforderungen
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Anforderungen" data-md-level="1">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Anforderungen
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../basic/" class="md-nav__link">
Grundbegriffe
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active">
Übersicht
</a>
</li>
<li class="md-nav__item">
<a href="../schemaRequirements/" class="md-nav__link">
Schemaanforderungen
</a>
</li>
<li class="md-nav__item">
<a href="../geometric/" class="md-nav__link">
Geometrische Anforderungen
</a>
</li>
<li class="md-nav__item">
<a href="../semantic/" class="md-nav__link">
Semantische Anforderungen
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_6_6" type="checkbox" id="__nav_6_6" >
<label class="md-nav__link" for="__nav_6_6" tabindex="0" aria-expanded="false">
Details
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Details" data-md-level="2">
<label class="md-nav__title" for="__nav_6_6">
<span class="md-nav__icon md-icon"></span>
Details
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../R_GE_R_TOO_FEW_POINTS/" class="md-nav__link">
R_TOO_FEW_POINTS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_CONSECUTIVE_POINTS_SAME/" class="md-nav__link">
R_CONSECUTIVE_POINTS_SAME
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_NOT_CLOSED/" class="md-nav__link">
R_RING_NOT_CLOSED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_SELF_INTERSECTION/" class="md-nav__link">
R_RING_SELF_INTERSECTION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_COLLAPSED_TO_LINE/" class="md-nav__link">
R_COLLAPSED_TO_LINE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INTERSECTING_RINGS/" class="md-nav__link">
P_INTERSECTING_RINGS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_NON_PLANAR/" class="md-nav__link">
P_NON_PLANAR
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INTERIOR_DISCONNECTED/" class="md-nav__link">
P_INTERIOR_DISCONNECTED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_HOLE_OUTSIDE/" class="md-nav__link">
P_HOLE_OUTSIDE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INNER_RINGS_NESTED/" class="md-nav__link">
P_INNER_RINGS_NESTED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_ORIENTATION_RINGS_SAME/" class="md-nav__link">
P_ORIENTATION_RINGS_SAME
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_MS/" class="md-nav__link">
MULTI_SURFACE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_TOO_FEW_POLYGONS/" class="md-nav__link">
S_TOO_FEW_POLYGONS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NOT_CLOSED/" class="md-nav__link">
S_NOT_CLOSED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NON_MANIFOLD_VERTEX/" class="md-nav__link">
S_NON_MANIFOLD_VERTEX
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NON_MANIFOLD_EDGE/" class="md-nav__link">
S_NON_MANIFOLD_EDGE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_MULTIPLE_CONNECTED_COMPONENTS/" class="md-nav__link">
S_MULTIPLE_CONNECTED_COMPONENTS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_SELF_INTERSECTION/" class="md-nav__link">
S_SELF_INTERSECTION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_POLYGON_WRONG_ORIENTATION/" class="md-nav__link">
S_POLYGON_WRONG_ORIENTATION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION/" class="md-nav__link">
S_ALL_POLYGONS_WRONG_ORIENTATION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_SO/" class="md-nav__link">
SOLID
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Inhaltsverzeichnis">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="anforderungen-und-prufungen-fur-die-validierung-von-citygml-modellen">Anforderungen und Prüfungen für die Validierung von CityGML-Modellen<a class="headerlink" href="#anforderungen-und-prufungen-fur-die-validierung-von-citygml-modellen" title="Permanent link">&para;</a></h1>
<p>Die Anforderungen sind die Grundbausteine für ein Validierungsplan um CityGML-Modelle zu validieren. Für Namenskonventionen und Definitionen, siehe <a href="../basic/">Grundbegriffe</a>. </p>
<p>Eine Anforderung kann durch einen oder mehrere Prüfungen validiert werden. Eine Prüfung validiert ein oder mehrere Anforderungen bei einem Modell. Jede Prüfung kann Vorbedingungen haben. Wenn diese Vorbedingungen nicht erfüllt sind wird die Prüfung nicht ausgeführt.</p>
<p>Unterschieden wird dabei zwischen:</p>
<ul>
<li><a href="../schemaRequirements/">Schemaanforderungen</a></li>
<li><a href="../geometric/">Geometrieanforderungen</a></li>
<li><a href="../semantic/">Semantische Anforderungen</a></li>
</ul>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["content.code.annotate"], "search": "../assets/javascripts/workers/search.e5c33ebb.min.js", "translations": {"clipboard.copied": "In Zwischenablage kopiert", "clipboard.copy": "In Zwischenablage kopieren", "search.result.more.one": "1 weiteres Suchergebnis auf dieser Seite", "search.result.more.other": "# weitere Suchergebnisse auf dieser Seite", "search.result.none": "Keine Suchergebnisse", "search.result.one": "1 Suchergebnis", "search.result.other": "# Suchergebnisse", "search.result.placeholder": "Suchbegriff eingeben", "search.result.term.missing": "Es fehlt", "select.version": "Version ausw\u00e4hlen"}}</script>
<script src="../assets/javascripts/bundle.51d95adb.min.js"></script>
<script src="https://unpkg.com/mermaid/dist/mermaid.min.js"></script>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html lang="de" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="prev" href="../requirements/">
<link rel="next" href="../geometric/">
<link rel="icon" href="../img/citydoctor_logo.png">
<meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.0.6">
<title>Schemaanforderungen - CityDoctor2</title>
<link rel="stylesheet" href="../assets/stylesheets/main.558e4712.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.2505c338.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="https://unpkg.com/mermaid/dist/mermaid.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="red" data-md-color-accent="">
<script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#schemaanforderungen" class="md-skip">
Zum Inhalt
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Kopfzeile">
<a href=".." title="CityDoctor2" class="md-header__button md-logo" aria-label="CityDoctor2" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
CityDoctor2
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Schemaanforderungen
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="red" data-md-color-accent="" aria-label="Dunkelmodus verwenden" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Dunkelmodus verwenden" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="" data-md-color-accent="" aria-label="Hellen Modus verwenden" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Hellen Modus verwenden" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
</form>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Suche" placeholder="Suche" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Suche">
<button type="reset" class="md-search__icon md-icon" title="Zurücksetzen" aria-label="Zurücksetzen" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Suche wird initialisiert
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="CityDoctor2" class="md-nav__button md-logo" aria-label="CityDoctor2" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
CityDoctor2
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
CityDoctor2
</a>
</li>
<li class="md-nav__item">
<a href="../requiredSoftware/" class="md-nav__link">
Installation
</a>
</li>
<li class="md-nav__item">
<a href="../firstRun/" class="md-nav__link">
Erster Start
</a>
</li>
<li class="md-nav__item">
<a href="../userInterface/" class="md-nav__link">
Nutzeroberfläche
</a>
</li>
<li class="md-nav__item">
<a href="../validationPlan/" class="md-nav__link">
Prüfplan
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_6" type="checkbox" id="__nav_6" checked>
<label class="md-nav__link" for="__nav_6" tabindex="0" aria-expanded="true">
Anforderungen
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Anforderungen" data-md-level="1">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Anforderungen
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../basic/" class="md-nav__link">
Grundbegriffe
</a>
</li>
<li class="md-nav__item">
<a href="../requirements/" class="md-nav__link">
Übersicht
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
Schemaanforderungen
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
Schemaanforderungen
</a>
<nav class="md-nav md-nav--secondary" aria-label="Inhaltsverzeichnis">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Inhaltsverzeichnis
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#r_sc_schema_validation" class="md-nav__link">
R_SC_SCHEMA_VALIDATION
</a>
<nav class="md-nav" aria-label="R_SC_SCHEMA_VALIDATION">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#anforderung" class="md-nav__link">
Anforderung
</a>
</li>
<li class="md-nav__item">
<a href="#prufung" class="md-nav__link">
Prüfung
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../geometric/" class="md-nav__link">
Geometrische Anforderungen
</a>
</li>
<li class="md-nav__item">
<a href="../semantic/" class="md-nav__link">
Semantische Anforderungen
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_6_6" type="checkbox" id="__nav_6_6" >
<label class="md-nav__link" for="__nav_6_6" tabindex="0" aria-expanded="false">
Details
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Details" data-md-level="2">
<label class="md-nav__title" for="__nav_6_6">
<span class="md-nav__icon md-icon"></span>
Details
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../R_GE_R_TOO_FEW_POINTS/" class="md-nav__link">
R_TOO_FEW_POINTS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_CONSECUTIVE_POINTS_SAME/" class="md-nav__link">
R_CONSECUTIVE_POINTS_SAME
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_NOT_CLOSED/" class="md-nav__link">
R_RING_NOT_CLOSED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_SELF_INTERSECTION/" class="md-nav__link">
R_RING_SELF_INTERSECTION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_COLLAPSED_TO_LINE/" class="md-nav__link">
R_COLLAPSED_TO_LINE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INTERSECTING_RINGS/" class="md-nav__link">
P_INTERSECTING_RINGS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_NON_PLANAR/" class="md-nav__link">
P_NON_PLANAR
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INTERIOR_DISCONNECTED/" class="md-nav__link">
P_INTERIOR_DISCONNECTED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_HOLE_OUTSIDE/" class="md-nav__link">
P_HOLE_OUTSIDE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INNER_RINGS_NESTED/" class="md-nav__link">
P_INNER_RINGS_NESTED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_ORIENTATION_RINGS_SAME/" class="md-nav__link">
P_ORIENTATION_RINGS_SAME
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_MS/" class="md-nav__link">
MULTI_SURFACE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_TOO_FEW_POLYGONS/" class="md-nav__link">
S_TOO_FEW_POLYGONS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NOT_CLOSED/" class="md-nav__link">
S_NOT_CLOSED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NON_MANIFOLD_VERTEX/" class="md-nav__link">
S_NON_MANIFOLD_VERTEX
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NON_MANIFOLD_EDGE/" class="md-nav__link">
S_NON_MANIFOLD_EDGE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_MULTIPLE_CONNECTED_COMPONENTS/" class="md-nav__link">
S_MULTIPLE_CONNECTED_COMPONENTS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_SELF_INTERSECTION/" class="md-nav__link">
S_SELF_INTERSECTION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_POLYGON_WRONG_ORIENTATION/" class="md-nav__link">
S_POLYGON_WRONG_ORIENTATION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION/" class="md-nav__link">
S_ALL_POLYGONS_WRONG_ORIENTATION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_SO/" class="md-nav__link">
SOLID
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Inhaltsverzeichnis">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Inhaltsverzeichnis
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#r_sc_schema_validation" class="md-nav__link">
R_SC_SCHEMA_VALIDATION
</a>
<nav class="md-nav" aria-label="R_SC_SCHEMA_VALIDATION">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#anforderung" class="md-nav__link">
Anforderung
</a>
</li>
<li class="md-nav__item">
<a href="#prufung" class="md-nav__link">
Prüfung
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="schemaanforderungen">Schemaanforderungen<a class="headerlink" href="#schemaanforderungen" title="Permanent link">&para;</a></h1>
<h2 id="r_sc_schema_validation">R_SC_SCHEMA_VALIDATION<a class="headerlink" href="#r_sc_schema_validation" title="Permanent link">&para;</a></h2>
<h3 id="anforderung">Anforderung<a class="headerlink" href="#anforderung" title="Permanent link">&para;</a></h3>
<table>
<thead>
<tr>
<th>ID</th>
<th>R_SC_SCHEMA_VALIDATION</th>
</tr>
</thead>
<tbody>
<tr>
<td>Beschreibung</td>
<td>Eine grundlengende Anforderung ist, dass jedes CityGML Dokument wohl definiert sein muss und XSD valide ist.</td>
</tr>
<tr>
<td>Fehlercode</td>
<td>SC-SCHEMA-NOT-VALID</td>
</tr>
</tbody>
</table>
<h3 id="prufung">Prüfung<a class="headerlink" href="#prufung" title="Permanent link">&para;</a></h3>
<table>
<thead>
<tr>
<th>ID</th>
<th>SC_SCHEMA_VALIDATION</th>
</tr>
</thead>
<tbody>
<tr>
<td>Anforderungs ID</td>
<td>R_SC_SCHEMA_VALIDATION</td>
</tr>
<tr>
<td>Vorbedingungen</td>
<td>keine</td>
</tr>
<tr>
<td>Beschreibung</td>
<td>Werkzeuge um eine XSD Validierung durchzuführen sind verfügbar und geben verlässliche Ergebnisse</td>
</tr>
<tr>
<td>Fehlercode</td>
<td>SC_SCHEMA_NOT_VALID</td>
</tr>
</tbody>
</table>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["content.code.annotate"], "search": "../assets/javascripts/workers/search.e5c33ebb.min.js", "translations": {"clipboard.copied": "In Zwischenablage kopiert", "clipboard.copy": "In Zwischenablage kopieren", "search.result.more.one": "1 weiteres Suchergebnis auf dieser Seite", "search.result.more.other": "# weitere Suchergebnisse auf dieser Seite", "search.result.none": "Keine Suchergebnisse", "search.result.one": "1 Suchergebnis", "search.result.other": "# Suchergebnisse", "search.result.placeholder": "Suchbegriff eingeben", "search.result.term.missing": "Es fehlt", "select.version": "Version ausw\u00e4hlen"}}</script>
<script src="../assets/javascripts/bundle.51d95adb.min.js"></script>
<script src="https://unpkg.com/mermaid/dist/mermaid.min.js"></script>
</body>
</html>
\ No newline at end of file
{"config":{"lang":["de"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"CityDoctor2","text":"<p>CityDoctor2 ist eine Qualit\u00e4tspr\u00fcfungssoftware f\u00fcr 3D Stadtmodelle im CityGML format. CityDoctor kann CityGML 1/2 Dokumente einlesen und seit Version 3.12 kann auch eingeschr\u00e4nkt CityGML 3 gelesen werden. Alle Pr\u00fcfergebnisse k\u00f6nnen in xml oder pdf Form ausgegeben werden. Zus\u00e4tzlich implementiert CityDoctor die QualityADE um Pr\u00fcfergebnisse direkt in CityGML zu speichern.</p> <p></p>"},{"location":"R_GE_MS/","title":"R_GE_MS","text":""},{"location":"R_GE_MS/#anforderung","title":"Anforderung","text":"ID R_GE_MS Beschreibung Ein MultiSurface ist eine Sammlung von Polygonen ohne weitere Einschr\u00e4nkungen. Ein MultiSurface ist nur g\u00fcltig, wenn alle Polygone g\u00fcltig sind. Die Anforderungen R_SC_SCHEMA_VALIDATION, R_GE_R_ALL, R_GE_P_ALL m\u00fcssen erf\u00fcllt werden Fehlercode --"},{"location":"R_GE_MS/#prufung","title":"Pr\u00fcfung","text":"<p>Keine weiteren Pr\u00fcfungen notwendig</p>"},{"location":"R_GE_P_HOLE_OUTSIDE/","title":"R_GE_P_HOLE_OUTSIDE","text":""},{"location":"R_GE_P_HOLE_OUTSIDE/#anforderung","title":"Anforderung","text":"ID R_GE_P_HOLE_OUTSIDE Beschreibung Innerer Ring darf nicht komplett au\u00dferhalb des \u00e4u\u00dferen Rings sein. Fehlercode GE_P_HOLE_OUTSIDE <p>Beispiel: </p>"},{"location":"R_GE_P_HOLE_OUTSIDE/#prufung","title":"Pr\u00fcfung","text":"ID C_GE_P_HOLE_OUTSIDE Anforderungs ID R_GE_P_HOLE_OUTSIDE Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_ALL R_GE_P_NON_PLANAR, R_GE_P_ORIENTATION_RINGS_SAME Beschreibung Fehlercode GE_P_HOLE_OUTSIDE"},{"location":"R_GE_P_INNER_RINGS_NESTED/","title":"R_GE_P_INNER_RINGS_NESTED","text":""},{"location":"R_GE_P_INNER_RINGS_NESTED/#anforderung","title":"Anforderung","text":"ID R_GE_P_INNER_RINGS_NESTED Beschreibung Innere Ringe dr\u00fcfen nicht innerhalb eines anderen inneren Rings sein. Fehlercode GE_P_INNER_RINGS_NESTED <p>Beispiel: </p>"},{"location":"R_GE_P_INNER_RINGS_NESTED/#prufung","title":"Pr\u00fcfung","text":"ID C_GE_P_INNER_RINGS_NESTED Anforderungs ID R_GE_P_INNER_RINGS_NESTED Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_ALL, R_GE_P_NON_PLANAR, R_GE_P_ORIENTATION_RINGS_SAME Beschreibung Fehlercode GE_P_INNER_RINGS_NESTED"},{"location":"R_GE_P_INTERIOR_DISCONNECTED/","title":"R_GE_P_INTERIOR_DISCONNECTED","text":""},{"location":"R_GE_P_INTERIOR_DISCONNECTED/#anforderung","title":"Anforderung","text":"ID R_GE_P_INTERIOR_DISCONNECTED Beschreibung Die innere Fl\u00e4che eines Polygons muss verbunden sein. Parameter minVertexDistance Ein Punkt ber\u00fchrt eine Kante wenn der Abstand kleiner als minVertexDistance,siehe Vertex Anforderungen) Fehlercode GE_P_INTERIOR_DISCONNECTED <p>Beispiele: </p> <p></p>"},{"location":"R_GE_P_INTERIOR_DISCONNECTED/#prufung","title":"Pr\u00fcfung","text":"ID C_GE_P_INTERIOR_DISCONNECTED Anforderungs ID R_GE_P_INTERIOR_DISCONNECTED Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_ALL, R_GE_P_NON_PLANAR, R_GE_P_ORIENTATION_RINGS_SAME Beschreibung Fehlercode GE_P_INTERIOR_DISCONNECTED"},{"location":"R_GE_P_INTERSECTING_RINGS/","title":"R_GE_P_INTERSECTING_RINGS","text":""},{"location":"R_GE_P_INTERSECTING_RINGS/#anforderung","title":"Anforderung","text":"ID R_GE_P_INTERSECTING_RINGS Beschreibung \u00c4u\u00dfere und innere Ring d\u00fcrfen sich nicht verschneiden Parameter minVertexDistance Zwei Ringe verschneiden sich nicht, wenn nur ein Punkt des einen Rings den Anderen ber\u00fchrt. Ein Punkt ber\u00fchrt eine Kante nur dann wenn der Abstand weniger als minVertexDistance ist. Punkte k\u00f6nnen als gleich angesehen werden, trotz (kleiner) Abst\u00e4nde, siehe Vertex Anforderungen Fehlercode GE_P_INTERSECTING_RINGS <p>Beispiele:</p> <p>\u00c4u\u00dferer Ring verschneidet inneren Ring: </p> <p>Zwei innere Rings verschneiden: </p>"},{"location":"R_GE_P_INTERSECTING_RINGS/#prufung","title":"Pr\u00fcfung","text":"ID C_GE_P_INTERSECTING_RINGS Anforderungs ID R_GE_P_INTERSECTING_RINGS Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_ALL, R_GE_P_NON_PLANAR, R_GE_P_HOLE_OUTSIDE, R_GE_P_INNER_RINGS_NESTED, R_GE_P_ORIENTATION_RINGS_SAME Beschreibung Wenn ein Punkt eines inneren Rings au\u00dferhalb des \u00e4u\u00dferen ist oder innerhalb eines anderen inneren Rings, ist das eine Verschneidung. Fehlercode GE_P_INTERSECTING_RINGS"},{"location":"R_GE_P_NON_PLANAR/","title":"R_GE_P_NON_PLANAR","text":""},{"location":"R_GE_P_NON_PLANAR/#anforderung","title":"Anforderung","text":"ID R_GE_P_NON_PLANAR Beschreibung Jedes Polygon muss Planar sein. Planrit\u00e4t ist erreicht wenn kein Punkt weiter als distanceTolerance von der Regressionsebene aller Punkte ist, sowie die Normalen jedes Dreicks des tessilierten Polygons keine gr\u00f6\u00dfere Winkelabweichung als angleTolerance haben. Parameter 1: type Der Typ der Panarit\u00e4tspr\u00fcfung kann ausgew\u00e4hlt werden. Muss eins von distance, angle, both sein.<ul><li>Wenn der Parameter distance ist: Nur die Distanzpr\u00fcfung wird ausgef\u00fchrt.</li><li> Wenn der Parameter angle ist: Nur die Normalenabweichungspr\u00fcfung wird ausgef\u00fchrt.</li><li>Wenn der Parameter both ist: Beide Pr\u00fcfungen werden ausgef\u00fchrt.</li></ul> Parameter 2: distanceTolerance Toleranz der Distanz eines Punktens von der Regressionsebene Parameter 3: angleTolerance Toleranz des Winkels der Dreiecksnormalen Fehlercodes GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION <p>Normalen Abweichung: </p> <p>Warning</p> <p>Das Ergebnis der Normalenpr\u00fcfung ist abh\u00e4ngig von dem Ergebnis der Tesselierung und damit nicht 100% zuverl\u00e4ssig.</p>"},{"location":"R_GE_P_NON_PLANAR/#prufung","title":"Pr\u00fcfung","text":"ID C_GE_P_NON_PLANAR Anfoderungs ID R_GE_P_NON_PLANAR Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_ALL Beschreibung Tesseliert um die Dreiecksnormalen zu berechnen. Erstellt eine Regressionsebene aus allen Polygonpunkten um den Abstand der Punkte zur Ebene zu berechnen Fehlercode GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION"},{"location":"R_GE_P_ORIENTATION_RINGS_SAME/","title":"R_GE_P_ORIENTATION_RINGS_SAME","text":""},{"location":"R_GE_P_ORIENTATION_RINGS_SAME/#anforderung","title":"Anforderung","text":"ID R_GE_P_ORIENTATION_RINGS_SAME Beschreibung \u00c4u\u00dfere und innere Ringe d\u00fcrfen nicht die selbe Orientierung haben. Fehlercode GE_P_ORIENTATION_RINGS_SAME <p>Beispiel : </p>"},{"location":"R_GE_P_ORIENTATION_RINGS_SAME/#prufung","title":"Pr\u00fcfung","text":"ID C_GE_P_ORIENTATION_RINGS_SAME Anforderungs ID R_GE_P_ORIENTATION_RINGS_SAME Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_ALL, R_GE_P_NON_PLANAR Beschreibung Fehlercode GE_P_ORIENTATION_RINGS_SAME"},{"location":"R_GE_R_COLLAPSED_TO_LINE/","title":"R_GE_R_COLLAPSED_TO_LINE","text":""},{"location":"R_GE_R_COLLAPSED_TO_LINE/#anforderung","title":"Anforderung","text":"ID R_GE_R_COLLAPSED_TO_LINE Beschreibung Ein Spezialfall von Selbstverschneidung (R_GE_R_SELF_INTERSECTION): Der Ring ist eine Linie. Wenn der Ring zu ein Punkt darstellt, dann sollte GE_R_TOO_FEW_POINTS / GE_R_CONSECUTIVE_POINTS_SAME verwendet werden. Fehlercode GE_R_SELF_INTERSECTION, GE_R_COLLAPSED_TO_LINE, GE_R_TOO_FEW_POINTS, GE_R_CONSECUTIVE_POINTS_SAME"},{"location":"R_GE_R_COLLAPSED_TO_LINE/#prufung","title":"Pr\u00fcfung","text":"ID GE_R_COLLAPSED_TO_LINE Anforderungs ID R_GE_R_COLLAPSED_TO_LINE Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_TOO_FEW_POINTS, R_GE_R_CONSECUTIVE_POINTS_SAME, R_GE_R_NOT_CLOSED Beschreibung Ring als ein Punkt kann nicht passieren, wegen den Vorbedingungen. Ist eigentlich eine Selbstverschneidung Fehlercode GE_R_COLLAPSED_TO_LINE"},{"location":"R_GE_R_CONSECUTIVE_POINTS_SAME/","title":"R_GE_R_CONSECUTIVE_POINTS_SAME","text":""},{"location":"R_GE_R_CONSECUTIVE_POINTS_SAME/#anforderung","title":"Anforderung","text":"ID R_GE_R_CONSECUTIVE_POINTS_SAME Beschreibung Punkte innerhalb eines Rings sollen sich nicht wiederholen (ausgenommen der erste und der letzte im Fall von GML, siehe R_GE_R_NOT_CLOSED. Dieser Fehler ist oft der Fall wenn zwei Punkte an der selben Stelle sind. Parameter minVertexDistance Punkte k\u00f6nnen als gleich angesehen werden, trotz (kleiner) Abst\u00e4nde, siehe Vertex Anforderungen Fehlercode GE_R_CONSECUTIVE_POINTS_SAME <p>Zum Beispiel dieser Ring ist fehlerhaft: <pre><code>&lt;gml:LinearRing&gt;\n&lt;gml:pos&gt;0.0 0.0 0.0&lt;/gml:pos&gt;\n&lt;gml:pos&gt;1.0 0.0 0.0&lt;/gml:pos&gt; &lt;gml:pos&gt;1.0 0.0 0.0&lt;/gml:pos&gt;\n&lt;gml:pos&gt;1.0 1.0 0.0&lt;/gml:pos&gt; &lt;gml:pos&gt;0.0 1.0 0.0&lt;/gml:pos&gt; &lt;gml:pos&gt;0.0 0.0 0.0&lt;/gml:pos&gt;\n&lt;/gml:LinearRing&gt;\n</code></pre></p> <p>Dieser Ring ist auch Fehlerhaft mit dem Parameter minVertexDistance = 0.1 <pre><code>&lt;gml:LinearRing&gt;\n&lt;gml:pos&gt;0.0 0.0 0.0&lt;/gml:pos&gt;\n&lt;gml:pos&gt;0.05 0.0 0.0&lt;/gml:pos&gt;\n&lt;gml:pos&gt;1.0 0.0 0.0&lt;/gml:pos&gt; &lt;gml:pos&gt;1.0 1.0 0.0&lt;/gml:pos&gt; &lt;gml:pos&gt;0.0 1.0 0.0&lt;/gml:pos&gt; &lt;gml:pos&gt;0.0 0.0 0.0&lt;/gml:pos&gt;\n&lt;/gml:LinearRing&gt;\n</code></pre></p> <p>Das n\u00e4chste Beispiel zeigt einen fehlerhaften Ring mit einem Punkt, der zwei mal vorkommt aber die Wiederholung nicht aufeinanderfolgend ist. Dies resultiert in einer Selbstverschneidung, dies ist mit dieser Anforderung nicht abgedeckt.</p> <pre><code>&lt;gml:LinearRing&gt;\n&lt;gml:pos&gt;0.0 0.0 0.0&lt;/gml:pos&gt;\n&lt;gml:pos&gt;1.0 0.0 0.0&lt;/gml:pos&gt; &lt;gml:pos&gt;1.0 1.0 0.0&lt;/gml:pos&gt; &lt;gml:pos&gt;1.0 0.0 0.0&lt;/gml:pos&gt; &lt;gml:pos&gt;0.0 1.0 0.0&lt;/gml:pos&gt; &lt;gml:pos&gt;0.0 0.0 0.0&lt;/gml:pos&gt;\n&lt;/gml:LinearRing&gt;\n</code></pre>"},{"location":"R_GE_R_CONSECUTIVE_POINTS_SAME/#prufungen","title":"Pr\u00fcfungen","text":"ID C_GE_R_CONSECUTIVE_POINTS_SAME Anforderungs ID R_GE_R_CONSECUTIVE_POINTS_SAME Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_NOT_CLOSED, R_GE_R_TOO_FEW_POINTS Beschreibung Pr\u00fcft ob sich ein Punkt wiederholt Fehlercode GE_R_CONSECUTIVE_POINTS_SAME ID C_GE_R_DUPLICATE_POINT Anforderungs ID R_GE_R_CONSECUTIVE_POINTS_SAME, GE-gml:LR-0004 (teilweise) Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_NOT_CLOSED, R_GE_R_TOO_FEW_POINTS Beschreibung Erkennt aufeinanderfolgende als auch andere wiederholende Punkte. Fehlercode GE_R_CONSECUTIVE_POINTS_SAME, GE_R_SELF_INTERSECTION"},{"location":"R_GE_R_NOT_CLOSED/","title":"R_GE_R_NOT_CLOSED","text":""},{"location":"R_GE_R_NOT_CLOSED/#anforderung","title":"Anforderung","text":"ID R_GE_R_NOT_CLOSED Beschreibung Der erste und letzte Punkt m\u00fcssen in GML der gleiche sein. Parameter minVertexDistance Punkte k\u00f6nnen als gleich angesehen werden, trotz (kleiner) Abst\u00e4nde, siehe Vertex Anforderungen Fehlercode GE_R_NOT_CLOSED <p>Zum Beispiel dieser Ring ist fehlerhaft: <pre><code>&lt;gml:LinearRing&gt;\n&lt;gml:pos&gt;0.0 0.0 0.0&lt;/gml:pos&gt;\n&lt;gml:pos&gt;1.0 0.0 0.0&lt;/gml:pos&gt; &lt;gml:pos&gt;1.0 1.0 0.0&lt;/gml:pos&gt;\n&lt;gml:pos&gt;0.0 1.0 0.0&lt;/gml:pos&gt;\n&lt;/gml:LinearRing&gt;\n</code></pre> OK mit Parameter minVertexDistance = 0.1: <pre><code>&lt;gml:LinearRing&gt;\n&lt;gml:pos&gt;0.0 0.0 0.0&lt;/gml:pos&gt;\n&lt;gml:pos&gt;1.0 0.0 0.0&lt;/gml:pos&gt; &lt;gml:pos&gt;1.0 1.0 0.0&lt;/gml:pos&gt;\n&lt;gml:pos&gt;0.0 1.0 0.0&lt;/gml:pos&gt;\n&lt;gml:pos&gt;0.0 0.0 0.05&lt;/gml:pos&gt;\n&lt;/gml:LinearRing&gt;\n</code></pre></p>"},{"location":"R_GE_R_NOT_CLOSED/#prufung","title":"Pr\u00fcfung","text":"ID C_GE_R_NOT_CLOSED Anforderungs ID R_GE_R_NOT_CLOSED Vorbedingungen R_SC_SCHEMA_VALIDATION Beschreibung Der erste und letzte Punkt sollen der gleiche sein. Fehlercode GE_R_NOT_CLOSED"},{"location":"R_GE_R_SELF_INTERSECTION/","title":"R_GE_R_SELF_INTERSECTION","text":""},{"location":"R_GE_R_SELF_INTERSECTION/#anforderung","title":"Anforderung","text":"ID R_GE_R_SELF_INTERSECTION Beschreibung Ein Ring soll einfach sein, also sich nicht selbstverschneiden. Die Selbstverschneidung kann an einem konkreten Punkt sein, oder auch nicht. Parameter minVertexDistance Punkte k\u00f6nnen als gleich angesehen werden, trotz (kleiner) Abst\u00e4nde, siehe Vertex Anforderungen. Dieser Parameter wird auch dazu verwendet um zu bestimmen wann ein Punkt eine Kante ber\u00fchrt. Fehlercode GE_R_SELF_INTERSECTION <p>Beispiele f\u00fcr Selbstverschneidungen:</p> <p>Schleife: </p> <p>Punkt ber\u00fchrt Kante mit Parameter minVertexDistance: </p> <p>Doppelte Punkte: </p> <p>Doppelte Kante (Gleich wie doppelte Punkte): </p>"},{"location":"R_GE_R_SELF_INTERSECTION/#prufung","title":"Pr\u00fcfung","text":"ID C_GE_R_SELF_INTERSECTION Anforderungs ID R_GE_R_SELF_INTERSECTION Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_TOO_FEW_POINTS, R_GE_R_CONSECUTIVE_POINTS_SAME, R_GE_R_NOT_CLOSED Beschreibung Erkennt doppelte Punkte und Selbstverschneidende Kanten. Fehlercodes GE_R_SELF_INTERSECTION ID C_GE_R_DUPLICATE_POINT Anforderungs ID R_GE_R_CONSECUTIVE_POINTS_SAME, R_GE_R_SELF_INTERSECTION (teilweise) Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_TOO_FEW_POINTS, R_GE_R_NOT_CLOSED Beschreibung Erkennt wiederholende und nicht wiederholende doppelte Punkte. Letzteres ist eine Selbstverschneidung. Fehlercodes GE_R_CONSECUTIVE_POINTS_SAME, GE_R_SELF_INTERSECTION"},{"location":"R_GE_R_TOO_FEW_POINTS/","title":"R_GE_R_TOO_FEW_POINTS","text":""},{"location":"R_GE_R_TOO_FEW_POINTS/#anforderung","title":"Anforderung","text":"ID R_GE_R_TOO_FEW_POINTS Beschreibung Ein Ring muss mindestens 3 Punkte haben. F\u00fcr GML Ringe diese Anfoderung ignoriert die Tatsache, dass der erste und der letzte Punkt gleich sind (siehe R_GE_R_NOT_CLOSED). Ein GML Ring ist nach dieser Anfoderung valide, wenn er mindestens 3 unterschiedliche Punkte enth\u00e4lt aber er ist dann nicht geschlossen (Die Anfoderung R_GE_R_NOT_CLOSED ist nicht erf\u00fcllt). Parameter minVertexDistance Punkte k\u00f6nnen als gleich angesehen werden, trotz (kleiner) Abst\u00e4nde, siehe Vertex Anforderungen Fehlercode GE_R_TOO_FEW_POINTS <p>Zum Beispiel, dieser Ring ist fehlerhaft: <pre><code>&lt;gml:LinearRing&gt;\n&lt;gml:pos&gt;0.0 0.0 0.0&lt;/gml:pos&gt;\n&lt;gml:pos&gt;1.0 0.0 0.0&lt;/gml:pos&gt; &lt;gml:pos&gt;0.0 0.0 0.0&lt;/gml:pos&gt;\n&lt;/gml:LinearRing&gt;\n</code></pre> Valide Ringe:</p> <pre><code>&lt;gml:LinearRing&gt; &lt;!-- (1)! --&gt;\n&lt;gml:pos&gt;0.0 0.0 0.0&lt;/gml:pos&gt; &lt;gml:pos&gt;1.0 0.0 0.0&lt;/gml:pos&gt; &lt;gml:pos&gt;0.0 1.0 0.0&lt;/gml:pos&gt;\n&lt;/gml:LinearRing&gt;\n</code></pre> <ol> <li>Dieser Ring ist nicht geschlossen und wird daher vorher ausgeschlossen, h\u00e4tte aber genug unterschiedliche Punkte, um dieser Anfoderung zu gen\u00fcgen.</li> </ol> <pre><code>&lt;gml:LinearRing&gt;\n&lt;gml:pos&gt;0.0 0.0 0.0&lt;/gml:pos&gt;\n&lt;gml:pos&gt;1.0 0.0 0.0&lt;/gml:pos&gt; &lt;gml:pos&gt;0.0 1.0 0.0&lt;/gml:pos&gt;\n&lt;gml:pos&gt;0.0 0.0 0.0&lt;/gml:pos&gt;\n&lt;/gml:LinearRing&gt;\n</code></pre>"},{"location":"R_GE_R_TOO_FEW_POINTS/#prufung","title":"Pr\u00fcfung","text":"ID C_GE_R_TOO_FEW_POINTS Anfoderungs ID R_GE_R_TOO_FEW_POINTS Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_NOT_CLOSED Beschreibung Ring muss mindestens 3 unterschiedliche Punkte beinhalten Fehlercode GE_R_TOO_FEW_POINTS"},{"location":"R_GE_SO/","title":"R_GE_SO","text":""},{"location":"R_GE_SO/#anforderung","title":"Anforderung","text":"ID R_GE_SO Beschreibung Ein Solid ist eine Sammlung von Polygonen mit Einschr\u00e4nkungen. Die Geometrie muss 'wasserdicht' sein. Siehe Definition von Solids in Appendix A aus dem CityGML QIE. Ein Solid ist g\u00fcltig, wenn die Anforderungen R_SC_SCHEMA_VALIDATION, R_GE_R_ALL, R_GE_P_ALL, R_GE_S_ALL erf\u00fcllt sind. Fehlercode --"},{"location":"R_GE_SO/#prufung","title":"Pr\u00fcfung","text":"<p>keine weitere Pr\u00fcfung notwendig</p>"},{"location":"R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION/","title":"R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION","text":""},{"location":"R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION/#anforderung","title":"Anforderung","text":"ID R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION Beschreibung Alle Polygone haben die falsche Orientierung (definiert in R_GE_S_POLYGON_WRONG_ORIENTATION), so dass alle Polygone nach innen zeigen. Fehlercode GE_S_ALL_POLYGONS_WRONG_ORIENTATION"},{"location":"R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION/#prufung","title":"Pr\u00fcfung","text":"ID C_GE_S_ALL_POLYGONS_WRONG_ORIENTATION Anforderungs ID R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION Vorbedingung R_SC_SCHEMA_VALIDATION, R_GE_R_ALL, R_GE_P_ALL, R_GE_S_TOO_FEW_POLYGONS, R_GE_S_NOT_CLOSED, R_GE_S_NON_MANIFOLD_VERTEX, R_GE_S_NON_MANIFOLD_EDGE, R_GE_S_MULTIPLE_CONNECTED_COMPONENTS, R_GE_S_SELF_INTERSECTION, R_GE_S_POLYGON_WRONG_ORIENTATION Beschreibung Fehlercode GE_S_ALL_POLYGONS_WRONG_ORIENTATION"},{"location":"R_GE_S_MULTIPLE_CONNECTED_COMPONENTS/","title":"R_GE_S_MULTIPLE_CONNECTED_COMPONENTS","text":""},{"location":"R_GE_S_MULTIPLE_CONNECTED_COMPONENTS/#anforderung","title":"Anforderung","text":"ID R_GE_S_MULTIPLE_CONNECTED_COMPONENTS Beschreibung 1+ Polygone ist nicht mit der selben H\u00fclle verbuden. Fehlercode GE_S_MULTIPLE_CONNECTED_COMPONENTS"},{"location":"R_GE_S_MULTIPLE_CONNECTED_COMPONENTS/#prufung","title":"Pr\u00fcfung","text":"ID C_GE_S_MULTIPLE_CONNECTED_COMPONENTS Anforderungs ID R_GE_S_MULTIPLE_CONNECTED_COMPONENTS Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_ALL, R_GE_P_ALL, R_GE_S_TOO_FEW_POLYGONS Beschreibung Erstelle einen doppelten Graphen (Polygone werden Knoten, Polygone, die eine Kante teilen werden im Graph verbunden). Wenn der Graph nicht verbunden ist, gibt es mehrere verbundene Komponenten. Fehlercode GE_S_MULTIPLE_CONNECTED_COMPONENTS"},{"location":"R_GE_S_NON_MANIFOLD_EDGE/","title":"R_GE_S_NON_MANIFOLD_EDGE","text":""},{"location":"R_GE_S_NON_MANIFOLD_EDGE/#anforderung","title":"Anforderung","text":"ID R_GE_S_NON_MANIFOLD_EDGE Beschreibung Jede kannte sollte genau 2 Polygone begrenzen. Fehlercode GE_S_NON_MANIFOLD_EDGE Kommentar Diese Anforderung ist \u00e4hnlich zu GE_S_NOT_CLOSED: Wenn eine Kante mehr als 2 Polygon begrenzt, dann ist es ein GS_S_NON_MANIFOLD_EDGE Fehler. Wenn eine Kante nur ein Polygon begrenzt, ist es ein GE_S_NOT_CLOSED Fehler (ein Loch im Solid)"},{"location":"R_GE_S_NON_MANIFOLD_EDGE/#prufung","title":"Pr\u00fcfung","text":"ID C_GE_S_NON_MANIFOLD_EDGE Anforderungs ID R_GE_S_NON_MANIFOLD_EDGE Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_ALL, R_GE_P_ALL R_GE_S_TOO_FEW_POLYGONS Beschreibung Fehlercode GE_S_NON_MANIFOLD_EDGE"},{"location":"R_GE_S_NON_MANIFOLD_VERTEX/","title":"R_GE_S_NON_MANIFOLD_VERTEX","text":""},{"location":"R_GE_S_NON_MANIFOLD_VERTEX/#anforderung","title":"Anforderung","text":"ID R_GE_S_NON_MANIFOLD_VERTEX Beschreibung Jedes Polygon das an einem Punkt eines Solids anliegt muss \u00fcber Kanten mit den anderen anliegenden Polygonen verbunden sein. Alle Punkte und anliegende Polygone m\u00fcssen ein 'Regenschirm' erzeugen. Fehlercode GE_S_NON_MANIFOLD_VERTEX"},{"location":"R_GE_S_NON_MANIFOLD_VERTEX/#prufung","title":"Pr\u00fcfung","text":"ID C_GE_S_NON_MANIFOLD_VERTEX Anforderungs ID R_GE_S_NON_MANIFOLD_VERTEX Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_ALL, R_GE_P_ALL, R_GE_S_TOO_FEW_POLYGONS Beschreibung Fehlercode GE_S_NON_MANIFOLD_VERTEX"},{"location":"R_GE_S_NOT_CLOSED/","title":"R_GE_S_NOT_CLOSED","text":""},{"location":"R_GE_S_NOT_CLOSED/#anforderung","title":"Anforderung","text":"ID R_GE_S_NOT_CLOSED Beschreibung Die H\u00fclle darf keine L\u00f6cher haben, sie muss Wasserdicht sein. Fehlercode GE_S_NOT_CLOSED"},{"location":"R_GE_S_NOT_CLOSED/#prufung","title":"Pr\u00fcfung","text":"ID C_GE_S_NOT_CLOSED Anforderungs ID R_GE_S_NOT_CLOSED Vorbedingung R_SC_SCHEMA_VALIDATION, R_GE_R_ALL, R_GE_P_ALL, R_GE_S_TOO_FEW_POLYGONS Beschreibung Fehlercode GE_S_NOT_CLOSED <p>Die Pr\u00fcfung sucht alle Kanten und ordnet sie den jeweiligen Gegenkanten zu. Falls eine Kante keine Gegenkante hat so wird hier ein Loch in der H\u00fclle erkannt und ein Fehler herausgegeben.</p>"},{"location":"R_GE_S_POLYGON_WRONG_ORIENTATION/","title":"R_GE_S_POLYGON_WRONG_ORIENTATION","text":""},{"location":"R_GE_S_POLYGON_WRONG_ORIENTATION/#anforderung","title":"Anforderung","text":"ID R_GE_S_POLYGON_WRONG_ORIENTATION Beschreibung Ein Polygon muss so orientiert sein, dass die Normale des \u00e4u\u00dferen Ring nach au\u00dfen zeigt. The points are ordered counter-clockwise. Fehlercode GE_S_POLYGON_WRONG_ORIENTATION"},{"location":"R_GE_S_POLYGON_WRONG_ORIENTATION/#prufung","title":"Pr\u00fcfung","text":"ID C_GE_S_POLYGON_WRONG_ORIENTATION Anforderungs ID R_GE_S_POLYGON_WRONG_ORIENTATION Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_ALL, R_GE_P_ALL, R_GE_S_TOO_FEW_POLYGONS, R_GE_S_NOT_CLOSED, R_GE_S_NON_MANIFOLD_EDGE Beschreibung Fehlercode GE_S_POLYGON_WRONG_ORIENTATION"},{"location":"R_GE_S_SELF_INTERSECTION/","title":"R_GE_S_SELF_INTERSECTION","text":""},{"location":"R_GE_S_SELF_INTERSECTION/#anforderung","title":"Anforderung","text":"ID R_GE_S_SELF_INTERSECTION Beschreibung Der Solid darf sich nicht selbstverschneiden Fehlercode GE_S_SELF_INTERSECTION <p>Beispiel (links = OK, rechts = Fehlerhaft): </p>"},{"location":"R_GE_S_SELF_INTERSECTION/#prufung","title":"Pr\u00fcfung","text":"ID C_GE_S_SELF_INTERSECTION Anforderungs ID R_GE_S_SELF_INTERSECTION Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_ALL, R_GE_P_ALL, R_GE_S_TOO_FEW_POLYGONS, R_GE_S_NOT_CLOSED, R_GE_S_NON_MANIFOLD_VERTEX, R_GE_S_NON_MANIFOLD_EDGE, R_GE_S_MULTIPLE_CONNECTED_COMPONENTS, R_GE_S_POLYGON_WRONG_ORIENTATION Beschreibung Fehlercode GE_S_SELF_INTERSECTION"},{"location":"R_GE_S_TOO_FEW_POLYGONS/","title":"R_GE_S_TOO_FEW_POLYGONS","text":""},{"location":"R_GE_S_TOO_FEW_POLYGONS/#anforderung","title":"Anforderung","text":"ID R_GE_S_TOO_FEW_POLYGONS Beschreibung Solids m\u00fcssen mindestens 4 Polygone haben. Fehlercode GE_S_TOO_FEW_POLYGONS"},{"location":"R_GE_S_TOO_FEW_POLYGONS/#prufung","title":"Pr\u00fcfung","text":"ID C_GE_S_TOO_FEW_POLYGONS Anforderungs ID R_GE_S_TOO_FEW_POLYGONS Vorbedingungen R_SC_SCHEMA_VALIDATION, R_GE_R_ALL, R_GE_P_ALL Beschreibung Fehlercode GE_S_TOO_FEW_POLYGONS"},{"location":"basic/","title":"Validierung von 3D Stadtmodellen in CityGML","text":""},{"location":"basic/#begriffe-und-definitionen","title":"Begriffe und Definitionen","text":"<p>nach CityGML Quality Interoperability Experiment, chapter 3</p> <p>Validierung <pre><code>Prozess des validierens einer CityGML Datei nach spezifizierten Anforderungen. Eine valide Datei entspricht allen Anforderungen.\n</code></pre></p> <p>Anforderungen <pre><code>Regeln und Einschr\u00e4nkungen, die die Datenstruktur eindeutig definieren. Anforderungen k\u00f6nnen von dem CityGML Standard Dokument abgleitet werden oder gesondert, als Anforderung an den CityGML Standard, definiert werden um Mehrdeutigkeiten des Standards zu verhindern oder zus\u00e4tzliche nutzerabh\u00e4ngige Anforderungen zu definieren.\n</code></pre></p> <p>Pr\u00fcfung <pre><code>Algorithmische Implementation um eine Anforderung innerhalb eines Validerungsprogramms zu pr\u00fcfen.\n</code></pre></p> <p>Fehler <pre><code>Ergebnis einer Pr\u00fcfung im Falle einer Nichtkonformit\u00e4t von Anforderungen.\n</code></pre></p> <p>Validierungsplan <pre><code>Strukturierte Liste von Anforderungen, \u00fcberlicherweise angepasst an den konkreten Fall.\n</code></pre></p>"},{"location":"basic/#zusatzliche-defintionen","title":"Zus\u00e4tzliche Defintionen:","text":"<p>XSD valide <pre><code>Eine CityGML Datei XSD valide wenn sie dem CityGML XML Schema entspricht.\n</code></pre></p>"},{"location":"firstRun/","title":"Erster Start","text":""},{"location":"firstRun/#start","title":"Start","text":"<p>Nach dem entpacken der Zip Datei sollte je nach Version (GUI oder Batch) eine Struktur \u00e4hnlich diesem Bild rauskommen (Beispiel CityDoctorGUI): </p> <p>Um CityDoctor zu starten kann die start.bat verwendet werden.</p> <p>Die .bat Datei enth\u00e4lt dabei nur den Befehl: <pre><code>java -classpath libs/*;plugins/*;CityDoctorGUI-3.12.0.jar de.hft.stuttgart.citydoctor2.gui.MainWindow\n</code></pre></p> <p>Note</p> <p>Der Befehl hat sich \u00fcber die Versionshistorie von CityDoctor ver\u00e4ndert.</p> <p>F\u00fcr die Batch Version ist der Befehl analog und kann entsprechend f\u00fcr andere Betriebsysteme angepasst werden.</p> <p>Note</p> <p>F\u00fcr Linux oder Mac kann dieser Befehl auch verwendet werden, es muss nur das \";\" durch \":\" ersetzt werden. Der Rest bleibt gleich.</p>"},{"location":"geometric/","title":"Geometrieanforderungen","text":""},{"location":"geometric/#fehlercodes-for-geometrische-fehler","title":"Fehlercodes for geometrische Fehler","text":"<p>Die Fehlercodes wurden \u00fcbernommen aus dem CityGML Quality Interoperability Experiment, chapter 7.5.</p> <p>Note</p> <p>Die Anforderungen wurden in CityDoctor umbenannt um einen auch von Menschen zu verstehenden Begriff, analog zu den Fehlercodes, darzustellen.</p> <p>Alle geometrischen Fehler sind in dem \"GE\" Definitionsbereich. Da geometrische Validierung basierend auf den Primitiven auf drei verschiedenen Ebenen ausgef\u00fchrt wird enth\u00e4lt jede Anforderung eine Ebene:</p> <ul> <li>Ring: R</li> <li>Polygon: P</li> <li>H\u00fclle (Shell): S</li> </ul> <p>Fehlercodes folgen dem selben Namensschema wie die Anforderungen, siehe auch Grundbegriffe. Jede Verletzung einer Anforderung muss in einem Fehler enden, der einen entsprechenden Fehlercode beinhaltet. Jeder Fehler kann (und sollte) zus\u00e4tzliche Informationen beinhalten (z.B. Wenn ein Ring nicht geschlossen ist, dann sollte die ID des Rings mitgegeben werden).</p>"},{"location":"geometric/#vertex-punkt-anforderungen","title":"Vertex (Punkt) Anforderungen","text":"<p>Zwei Punkte A und B sind gleich wenn die Euclidische-Distanz zwischen den beiden Punkten kleiner als eine definierte Gr\u00f6\u00dfe ist (minVertexDistance). Diese definierte Gr\u00f6\u00dfe findet auch in vielen Anforderungen wieder Anwendung, zum Beispiel ber\u00fchrt ein Punkt eine Kante wenn der Abstand des Punktes kleiner ist als minVertexDistance. In den folgenden Anforderungen wird die Gr\u00f6\u00dfe verwendet:</p> <ul> <li>R_GE_R_CONSECUTIVE_POINTS_SAME</li> <li>R_GE_R_NOT_CLOSED</li> <li>R_GE_R_SELF_INTERSECTION</li> <li>R_GE_P_INTERIOR_DISCONNECTED</li> </ul> <p>Die folgenden Anforderungen wurden auf den drei geometrischen Ebenen definiert (nach Ledoux (2013)):</p>"},{"location":"geometric/#linear-ring","title":"Linear Ring","text":"Anforderungs ID Beschreibung Fehlercode Bekannte Pr\u00fcfungen R_GE_R_TOO_FEW_POINTS Zu wenig Punkte in einem Ring GE_R_TOO_FEW_POINTS C_GE_R_TOO_FEW_POINTS R_GE_R_CONSECUTIVE_POINTS_SAME 2 aufeinanderfolgende Punkte sind gleich GE_R_CONCECUTIVE_POINTS_SAME C_GE_R_CONCECUTIVE_POINTS_SAME, C_GE_R_DUPLICATE_POINT R_GE_R_NOT_CLOSED Der erste und letzte Punkt sind nicht gleich GE_R_NOT_CLOSED C_GE_R_NOT_CLOSED R_GE_R_SELF_INTERSECTION Selbstverschneidung z.B. eine Schleife GE_R_SELF_INTERSECTION C_GE_R_SELF_INTERSECTION, C_GE_R_DUPLICATE_POINT R_GE_R_COLLAPSED_TO_LINE Momentan nicht in Benutzung, da redundant mit R_GE_R_SELF_INTERSECTION Ring ist ein Punkt oder eine Linie GE_R_COLLAPSED_TO_LINE C_GE_R_COLLAPSED_TO_LINE R_GE_R_ALL Container f\u00fcr: R_GE_R_TOO_FEW_POINTS, R_GE_R_CONSECUTIVE_POINTS_SAME, R_GE_R_NOT_CLOSED, R_GE_R_SELF_INTERSECTION -- --"},{"location":"geometric/#polygon","title":"Polygon","text":"Anforderungs ID Beschreibung Fehlercode Bekannte Pr\u00fcfungen R_GE_P_INTERSECTING_RINGS 2+ Ringe schneiden sich GE_P_INTERSECTING_RINGS C_GE_P_INTERSECTING_RINGS R_GE_P_NON_PLANAR Nicht planares Polygon, sowohl Distanz als auch Fl\u00e4chennormale Abweichungen GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION C_GE_P_NON_PLANAR R_GE_P_INTERIOR_DISCONNECTED Innenfl\u00e4che ist nicht verbunden GE_P_INTERIOR_DISCONNECTED C_GE_P_INTERIOR_DISCONNECTED R_GE_P_HOLE_OUTSIDE 1+ inneren Ringe ist komplett au\u00dferhalb des Polygons GE_P_HOLE_OUTSIDE C_GE_P_HOLE_OUTSIDE R_GE_P_INNER_RINGS_NESTED Innerer Ring ist komplett innerhalb eines anderen inneren Rings GE_P_INNER_RINGS_NESTED C_GE_P_INNER_RINGS_NESTED R_GE_P_ORIENTATION_RINGS_SAME \u00c4u\u00dferer Ring und innerer Ring haben die selbe Orientation GE_P_ORIENTATION_RINGS_SAME C_GE_P_ORIENTATION_RINGS_SAME R_GE_P_ALL Container f\u00fcr: R_GE_P_INTERSECTING_RINGS, R_GE_P_NON_PLANAR, R_GE_P_INTERIOR_DISCONNECTED, R_GE_P_HOLE_OUTSIDE, R_GE_P_INNER_RINGS_NESTED, R_GE_P_ORIENTATION_RINGS_SAME, R_GE_R_ALL -- --"},{"location":"geometric/#solid-hulle-shell","title":"Solid / H\u00fclle (Shell)","text":"Anforderungs ID Beschreibung Fehlercode Bekannte Pr\u00fcfungen R_GE_S_TOO_FEW_POLYGONS &lt;4 Polygone GE_S_TOO_FEW_POLYGONS C_GE_S_TOO_FEW_POLYGONS R_GE_S_NOT_CLOSED Die H\u00fclle ist nicht wasserdicht / hat 1+ L\u00f6cher GE_S_NOT_CLOSED C_GE_S_NOT_CLOSED R_GE_S_NON_MANIFOLD_VERTEX Jedes Polygon, das an einem Punkt anliegt muss \u00fcber Kanten mit den Anderen verbunden sein GE_S_NON_MANIFOLD_VERTEX C_GE_S_NON_MANIFOLD_VERTEX R_GE_S_NON_MANIFOLD_EDGE An jeder Kante d\u00fcrfen nur 2 Polygon anliegen GE_S_NON_MANIFOLD_EDGE C_GE_S_NON_MANIFOLD_EDGE R_GE_S_MULTIPLE_CONNECTED_COMPONENTS Alle Polygone m\u00fcssen \u00fcber Punkte und Kanten verbunden sein GE_S_MULTIPLE_CONNECTED_COMPONENTS C_GE_S_MULTIPLE_CONNECTED_COMPONENTS R_GE_S_SELF_INTERSECTION Die H\u00fclle selbstverschneidet sich GE_S_SELF_INTERSECTION C_GE_S_SELF_INTERSECTION R_GE_S_POLYGON_WRONG_ORIENTATION Die Orientierung eines Polygons ist falsch GE_S_POLYGON_WRONG_ORIENTATION C_GE_S_POLYGON_WRONG_ORIENTATION R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION Alle Polygone zeigen in die falsche Richtung GE_S_ALL_POLYGONS_WRONG_ORIENTATION C_GE_S_ALL_POLYGONS_WRONG_ORIENTATION R_GE_S_ALL Container f\u00fcr: R_GE_S_TOO_FEW_POLYGONS, R_GE_S_NOT_CLOSED, R_GE_S_NON_MANIFOLD_VERTEX, R_GE_S_NON_MANIFOLD_EDGE, R_GE_S_MULTIPLE_CONNECTED_COMPONENTS, R_GE_S_SELF_INTERSECTION, R_GE_S_POLYGON_WRONG_ORIENTATION, R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION -- --"},{"location":"geometric/#parameter-uberblick","title":"Parameter \u00dcberblick","text":"Name Beschreibung Verwendet in Einheit minVertexDistance Minimale Abstand zwischen zwei Punkten bevor sie als der selbe Punkt angesehen werden R_GE_R_CONSECUTIVE_POINTS_SAME, R_GE_R_NOT_CLOSED, R_GE_R_SELF_INTERSECTION, R_GE_P_INTERIOR_DISCONNECTED Meter type Planarit\u00e4tspr\u00fcfungsart, kann distance, angle, both sein R_GE_P_NON_PLANAR - distanceTolerance Maximale Distanz eines Punktes von der Ausgleichsebene eines Polygons bevor es als Fehler angesehen wird R_GE_P_NON_PLANAR Meter angleTolerance Maximale Differenz im Winkel von angrenzenden Dreiecken einer Triangulierung bevor ein Polygon nicht mehr als Planar angesehen wird R_GE_P_NON_PLANAR Radiant"},{"location":"geometric/#abhangigkeitsbaum","title":"Abh\u00e4ngigkeitsbaum","text":"<p>Dies ist die Reihenfolge in der die Pr\u00fcfungen ausgef\u00fchrt werden. Wenn eine abh\u00e4ngige Pr\u00fcfung einen Fehler geworfen hat oder nicht ausgef\u00fchrt wurde, so wird die darauffolgende Pr\u00fcfung auch nicht ausgef\u00fchrt.</p> <pre><code>graph TD;\n X0001[R_SC_SCHEMA_VALIDATION]\n R0001[R_GE_R_TOO_FEW_POINTS]\n R0002[R_GE_R_CONSECUTIVE_POINTS_SAME]\n R0003[R_GE_R_NOT_CLOSED]\n R0004[R_GE_R_SELF_INTERSECTION]\n P0001[R_GE_P_INTERSECTING_RINGS]\n P0002[R_GE_P_NON_PLANAR]\n P0003[R_GE_P_INTERIOR_DISCONNECTED]\n P0004[R_GE_P_HOLE_OUTSIDE]\n P0005[R_GE_P_INNER_RINGS_NESTED]\n P0006[R_GE_P_ORIENTATION_RINGS_SAME]\n\n S0001[R_GE_S_TOO_FEW_POLYGONS]\n S0002[R_GE_S_NOT_CLOSED]\n S0003[R_GE_S_NON_MANIFOLD_VERTEX]\n S0004[R_GE_S_NON_MANIFOLD_EDGE]\n S0005[R_GE_S_MULTIPLE_CONNECTED_COMPONENTS]\n S0006[R_GE_S_SELF_INTERSECTION]\n S0007[R_GE_S_POLYGON_WRONG_ORIENTATION]\n S0008[R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION]\n\n X0001--&gt;R0003;\n R0003--&gt;R0001;\n R0001--&gt;R0002;\n R0002--&gt;R0004;\n R0004--&gt;P0002;\n P0002--&gt;P0006;\n P0006--&gt;P0003;\n P0006--&gt;P0004;\n P0006--&gt;P0005;\n P0004--&gt;P0001;\n P0005--&gt;P0001;\n P0001--&gt;S0001;\n P0003--&gt;S0001;\n S0001--&gt;S0002;\n S0001--&gt;S0004;\n S0001--&gt;S0003;\n S0001--&gt;S0005;\n S0002--&gt;S0007;\n S0004--&gt;S0007;\n S0007--&gt;S0006;\n S0003--&gt;S0006;\n S0005--&gt;S0006;\n S0006--&gt;S0008; </code></pre>"},{"location":"geometric/#multisurface-und-solid-geometrie","title":"Multisurface und Solid Geometrie","text":"<p>Um die Definition eines Validierungsplans zu vereinfachen werden zwei neue Anfoderungen zus\u00e4tzlich eingef\u00fchrt. Diese Anforderungen dienen lediglich zur Gruppierung von den vorhandenen Anforderungen und ben\u00f6tigen keine zus\u00e4tzlichen Pr\u00fcfungen.</p> Anforderungs ID Beschreibung Abh\u00e4ngigkeiten Fehlercode Bekannte Pr\u00fcfungen R_GE_MS Valide Multisurface-Geometrie R_SC-SCHEMA-VALIDATION, R_GE_P_ALL -- -- R_GE_SO Valide H\u00fcllengeometrie R_SC-SCHEMA-VALIDATION, R_GE_S_ALL -- --"},{"location":"requiredSoftware/","title":"Ben\u00f6tigte Software","text":""},{"location":"requiredSoftware/#java","title":"Java","text":"<p>Vor der CityDoctor Version 3.12.x wird Java 8 entweder als JDK oder als JRE ben\u00f6tigt. Ab der Version 3.12.x wird Java 17 ben\u00f6tigt.</p> <p>Warning</p> <p>Es wichtig, dass die installierte Java Version die JavaFX Bibliotheken mit einschlie\u00dft. Diese werden f\u00fcr die grafische Oberfl\u00e4che ben\u00f6tigt.</p> <p>Die Liberica JRE oder JDK hat sich f\u00fcr einen Einsatz mit CityDoctor bew\u00e4hrt.</p> <p>Note</p> <p>Die Liberica Distribution ist zu 100% frei und OpenSource.</p> <p>Note</p> <p>F\u00fcr die Entwicklung mit CityDoctor wird eine JDK ben\u00f6tigt.</p>"},{"location":"requiredSoftware/#citydoctor2","title":"CityDoctor2","text":"<p>CityDoctor kann von verschiedenen Seiten heruntergeladen werden. Die aktuellste Stelle ist ein gitlab Repository. Alternativ werden Releases auch auf der CityDoctor Homepage der BHT gelistet. Es gibt dabei immer zwei Versionen:</p> <ul> <li>CityDoctorGUI-3.x.x.zip: Das ist die grafische Oberfl\u00e4che inklusive der Pr\u00fcfungen. Geeignet f\u00fcr den Endnutzer auf einem Desktop PC.</li> <li>CityDoctorValidation-3.x.x.zip: Das ist die Batch-Version die f\u00fcr die Integration in Servern oder anderen bestehenden Systemen geeignet ist und hat keine grafische Oberfl\u00e4che sondern arbeitet Dateibasiert als Prozess.</li> </ul> <p>Note</p> <p>Es gibt manchmal Spezialversionen die Testweise erstellt worden sind um verschiedene Auslieferungsm\u00f6glichkeiten zu testen. Bsp: CityDoctorGUI-x.x.x-win.zip beinhaltet die JavaFX Bibliotheken sodass eine Java Umgebung ohne JavaFX auch verwendet werden kann.</p>"},{"location":"requirements/","title":"Anforderungen und Pr\u00fcfungen f\u00fcr die Validierung von CityGML-Modellen","text":"<p>Die Anforderungen sind die Grundbausteine f\u00fcr ein Validierungsplan um CityGML-Modelle zu validieren. F\u00fcr Namenskonventionen und Definitionen, siehe Grundbegriffe. </p> <p>Eine Anforderung kann durch einen oder mehrere Pr\u00fcfungen validiert werden. Eine Pr\u00fcfung validiert ein oder mehrere Anforderungen bei einem Modell. Jede Pr\u00fcfung kann Vorbedingungen haben. Wenn diese Vorbedingungen nicht erf\u00fcllt sind wird die Pr\u00fcfung nicht ausgef\u00fchrt.</p> <p>Unterschieden wird dabei zwischen:</p> <ul> <li>Schemaanforderungen</li> <li>Geometrieanforderungen</li> <li>Semantische Anforderungen</li> </ul>"},{"location":"schemaRequirements/","title":"Schemaanforderungen","text":""},{"location":"schemaRequirements/#r_sc_schema_validation","title":"R_SC_SCHEMA_VALIDATION","text":""},{"location":"schemaRequirements/#anforderung","title":"Anforderung","text":"ID R_SC_SCHEMA_VALIDATION Beschreibung Eine grundlengende Anforderung ist, dass jedes CityGML Dokument wohl definiert sein muss und XSD valide ist. Fehlercode SC-SCHEMA-NOT-VALID"},{"location":"schemaRequirements/#prufung","title":"Pr\u00fcfung","text":"ID SC_SCHEMA_VALIDATION Anforderungs ID R_SC_SCHEMA_VALIDATION Vorbedingungen keine Beschreibung Werkzeuge um eine XSD Validierung durchzuf\u00fchren sind verf\u00fcgbar und geben verl\u00e4ssliche Ergebnisse Fehlercode SC_SCHEMA_NOT_VALID"},{"location":"semantic/","title":"Semantische Anforderungen","text":"<p>Die semantischen Anforderungen sind meistens auf Attributbasis. Daraus ergeben sich 3 Fehlerzust\u00e4nde f\u00fcr ein Attribut:</p> <ul> <li>SE_ATTRIBUTE_WRONG_VALUE: Wenn ein Attribut ein falschen Wert hat.</li> <li>SE_ATTRIBUTE_MISSING: Wenn ein Attribut fehlt, aber vorhanden sein sollte.</li> <li>SE_ATTRIBUTE_INVALID: Wenn ein Attribut vorhanden ist aber verboten ist.</li> </ul> <p>Warning</p> <p>SE_ATTRIBUTE_INVALID: ist noch nicht in CityDoctor und der QualityADE umgesetzt ist aber geplant in einer neuen Version zu unterst\u00fctzen.</p>"},{"location":"semantic/#schematron","title":"Schematron","text":"<p>In CityDoctor wurde das XML Validierungssystem Schematron integriert um flexibel Attributpr\u00fcfungen anzupassen und zu unterst\u00fctzen. </p> <p>Hier ist ein Beispiel f\u00fcr eine Schematron Datei die CityDoctor integrieren kann:</p> <pre><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;schema xmlns=\"http://purl.oclc.org/dsdl/schematron\" queryBinding=\"xslt2\"&gt;\n&lt;ns prefix=\"gml\" uri=\"http://www.opengis.net/gml\"/&gt;\n&lt;ns prefix=\"bldg\" uri=\"http://www.opengis.net/citygml/building/2.0\"/&gt;\n&lt;pattern&gt;\n&lt;rule context=\"//*:Building\"&gt;\n&lt;assert test=\"count(descendant::*:lod1Solid) &amp;gt; 0 or count(descendant::*:lod2Solid) &amp;gt; 0 or count(descendant::*:lod3Solid) &amp;gt; 0 or count(descendant::*:lod4Solid) &amp;gt; 0\"&gt;&lt;value-of select=\"@gml:id | @id\"/&gt;||||SE_ATTRIBUTE_MISSING||any solid||false&lt;/assert&gt;\n&lt;/rule&gt;\n&lt;rule context=\"//*:BuildingPart\"&gt;\n&lt;assert test=\"count(*:lod1Solid) = 1 or count(*:lod2Solid) = 1 or count(*:lod3Solid) = 1 or count(*:lod4Solid) = 1\"&gt;&lt;value-of select=\"ancestor::*:Building/@*:id\"/&gt;||&lt;value-of select=\"@gml:id | @id\"/&gt;||SE_ATTRIBUTE_MISSING||any solid||false&lt;/assert&gt;\n&lt;/rule&gt;\n&lt;/pattern&gt;\n&lt;/schema&gt; </code></pre> <p>Diese Datei pr\u00fcft, dass alle Buildings in sich selbst oder in einem ihrer Unterelementen ein Solid beliebigen LODSs vorhanden ist. Au\u00dferdem stellt die Datei sicher, dass jedes BuildingPart ein Solid enth\u00e4lt. Wenn dies nicht der Fall ist wird eine Fehlermeldung ausgegeben. Die Fehlermeldung ist dabei so formattiert, dass CityDoctor sie interpretieren und in das interne Datenmodell einbinden kann.</p>"},{"location":"semantic/#fehlerformat","title":"Fehlerformat","text":"<p>Das Fehlerformat ist ein CSV-Format mit || als Trennzeichen</p> <p><pre><code>parent id||child id||error code||error type||is generic attribute\n</code></pre> Die Fehlermeldung besteht aus den folgenden Teilen:</p> <ul> <li>Die <code>parent id</code> ist die gml id des obersten Elements z.B. Building oder Bridge. </li> <li>Falls der Fehler in einem Unterelement aufgetreten ist so kann diese ID in dem Feld f\u00fcr die <code>child id</code> eingetragen werden.</li> <li>Im Feld <code>error type</code> ist einer der 3 Fehlertypen einzutragen: <code>SE_ATTRIBUTE_WRONG_VALUE, SE_ATTRIBUTE_MISSING, SE_ATTRIBUTE_INVALID</code>.</li> <li>Um ein generisches Attribut mit dem Namen <code>measuredHeight</code> von dem nicht generischen Attribut zu unterscheiden ist im letzten Feld vorgesehen <code>true</code> einzutragen wenn es sich um ein generisches Attribut handelt ansonsten <code>false</code>. </li> </ul>"},{"location":"userInterface/","title":"Nutzeroberfl\u00e4che","text":""},{"location":"userInterface/#citydoctor","title":"CityDoctor","text":"<p>In der oberen Leiste sind folgende Schaltfl\u00e4chen in Reihenfolge:</p> <ul> <li>Laden: \u00d6ffnet den Dialog zum laden einer CityGML Datei</li> <li>Pr\u00fcfen: \u00d6ffnet den Dialog zum pr\u00fcfen einer geladenen CityGML</li> <li>Pr\u00fcfberichte: \u00d6ffnet den Dialog zum schreiben eines Pr\u00fcfprotokolls in xml oder pdf Form</li> <li>Gitternetz: Zeigt/Versteckt das Gitternetz anstatt gef\u00fcllter Polygone</li> <li>R\u00fcckseiten: Zeigt/Versteckt R\u00fcckseiten von Polygonen</li> <li>Globale Ansicht: L\u00e4dt alle Elemente einer CityGML in die Ansicht</li> <li>LODs: Schaltet einzelne LODs von der Ansicht an oder aus</li> <li>Speichern: Speichert eine CityGML Datei zur\u00fcck, falls die Datei gepr\u00fcft wurde wird die QualityADE mitgeschrieben.</li> <li>About: \u00d6ffnet den Dialog mit Informationen zu dem Projekt CityDoctor2</li> <li>Ansichten: Wechselt verschiedene Ansichten. F\u00fcr die Pr\u00fcfung gibt es nur eine.</li> <li>Sprache: Hier kann die Sprache eingestellt werden (Deutsch/Englisch)</li> </ul> <p>Warning</p> <p>Das Anzeigen der Globalen Ansicht kann bei gro\u00dfen CityGML Dateien (&gt; 100mb je nach System) zu abst\u00fcrzen f\u00fchren. Das Anzeigen kann kurz dauern.</p>"},{"location":"userInterface/#laden","title":"Laden","text":"<p>\u00dcber die Schaltfl\u00e4che Laden wird der Dialog zum laden einer CityGML Datei ge\u00f6ffnet.</p> <p></p> <p>In der Datei Leiste kann ein Dateipfad eingetragen werden oder \u00fcber die Schaltfl\u00e4che Ausw\u00e4hlen ausgew\u00e4hlt werden.</p> <p>Au\u00dferdem k\u00f6nnen weitere Einstellungen f\u00fcr das Lesen der Datei angegeben werden.</p> <ul> <li>NumberOfRoundingPlaces: Auf wie viele Nachkommastellen werden die eingelesenen Werte gerundet.</li> <li>XML-Validierung: F\u00fchrt eine XML Validierung durch. Fehler werden dabei direkt beim einlesen festgestellt und das Einlesen wird abgebrochen.</li> <li>Speicherverbrauch: Spart RAM um gr\u00f6\u00dfere Dateien in der GUI zu erm\u00f6glichen. Kostet geringf\u00fcgig Performance bei der Pr\u00fcfung.</li> </ul> <p>Beim Laden wird der Fortschritt ungef\u00e4hr durch den Ladebalken repr\u00e4sentiert.</p> <p>Note</p> <p>Dateien k\u00f6nnen auch direkt per Drag and Drop vom Dateimanager in die GUI gezogen werden ohne den Laden Dialog zu verwenden. Dabei werden die Default Werte angenommen (8 Nachkommastellen, keine XML-Validierung)</p> <p>Nach dem Laden einer CityGML Datei werden die Elemente in den einzelnen Tabs angezeigt. Durch ausw\u00e4hlen eines Elements wird das in der Ansicht angezeigt.</p> <p></p> <p>Note</p> <p>Durch Ausw\u00e4hlen des obersten Elements eines Reiters werden alle Elemente innerhalb diese Reiters angezeigt. Wie obige Warnung schon besagt, gilt auch hier, dass gr\u00f6\u00dfere Datenmengen zu Abst\u00fcrzen f\u00fchren.</p>"},{"location":"userInterface/#prufen","title":"Pr\u00fcfen","text":"<p>Im Pr\u00fcfdialog kann der Validierungsplan angepasst werden. Hier werden neben den Verf\u00fcgbaren Pr\u00fcfungen auch die globalen Parameter angezeigt.</p> <p>Ver\u00e4ndert k\u00f6nnen die Parameter mit einem Doppelklick in die Wert Spalte. Die Einheit ist dabei fest.</p> <p>Note</p> <p>Der Parameter numberOfRoundingPlaces kann nicht ver\u00e4ndert werden. Er wurde beim Laden der Datei festgelegt.</p> <p>Falls Pr\u00fcfungen nicht ausgef\u00fchrt werden sollen k\u00f6nnen sie in der Spalte Aktiv deaktiviert werden.</p> <p>Warning</p> <p>Wenn Pr\u00fcfungen deaktiviert wurden die andere aktiven Pr\u00fcfungen aber als Abh\u00e4ngigkeit ben\u00f6tigen werden sie bei der Pr\u00fcfung wieder aktiviert um die Stabilit\u00e4t zu gew\u00e4hrleisten. Siehe Anforderungen.</p> <p>In dem Feld Schematron Datei kann ein Pfad zu einer Schematron Datei eingetragen werden. In dieser Datei k\u00f6nnen flexible Regeln f\u00fcr die semantischen Anforderungen festgelegt werden. Siehe Semantische Pr\u00fcfungen</p> <p>\u00dcber die beiden Schaltfl\u00e4chen oben rechts kann der Pr\u00fcfplan gespeichert und geladen werden.</p> <p>Nach der Pr\u00fcfung werden fehlerhafte Elemente rot und fehlerfreie Elemente gr\u00fcn eingef\u00e4rbt. Bei der Auswahl eines Elements das fehler beinhaltet werden die Fehler in dem unteren Tab Fehler angezeigt. Dort kann der Fehler ausgew\u00e4hlt werden um ihn in CityDoctor anzuzeigen und weitere Informationen zu erhalten.</p> <p></p> <p>Die Elemente k\u00f6nnen mit dem Dropdown-Men\u00fc gefiltert werden um nur fehlerhafte Elemente anzuzeigen.</p>"},{"location":"userInterface/#prufberichte","title":"Pr\u00fcfberichte","text":"<p>In diesem Dialog gibt es nochmal eine \u00dcbersicht \u00fcber die Fehler in Bildform und die M\u00f6glichkeit einen xml oder pdf Bericht zu schreiben.</p> <p></p>"},{"location":"validationPlan/","title":"Validierungsplan","text":"<p>der Validierungsplan f\u00fcr CityDoctor wird in YAML angegeben.</p> <p>F\u00fcr die Version 3.12.x sieht ein Beispiel so aus: <pre><code>globalParameters:\nnumberOfRoundingPlaces: 8\n# in m\nminVertexDistance: 0.0001\nschematronPath: 'checkForSolid.xml'\nuseStreaming: true # (1)!\nrequirements:\nR_GE_R_TOO_FEW_POINTS:\nenabled: true\nR_GE_R_NOT_CLOSED:\nenabled: true\nR_GE_R_CONSECUTIVE_POINTS_SAME:\nenabled: true\nR_GE_R_SELF_INTERSECTION:\nenabled: true\nR_GE_S_MULTIPLE_CONNECTED_COMPONENTS:\nenabled: true\nR_GE_P_INTERIOR_DISCONNECTED:\nenabled: true\nR_GE_P_INTERSECTING_RINGS:\nenabled: true\nR_GE_P_NON_PLANAR:\nenabled: true\nparameters:\n# one of (\"distance\", \"angle\", \"both\")\ntype: distance\n# in m\ndistanceTolerance: 0.01\n# in degree\nangleTolerance: 1\nR_GE_P_HOLE_OUTSIDE:\nenabled: true\nR_GE_P_ORIENTATION_RINGS_SAME:\nenabled: true\nR_GE_P_INNER_RINGS_NESTED:\nenabled: true\nR_GE_S_TOO_FEW_POLYGONS:\nenabled: true\nR_GE_S_NOT_CLOSED:\nenabled: true\nR_GE_S_NON_MANIFOLD_EDGE:\nenabled: true\nR_GE_S_POLYGON_WRONG_ORIENTATION:\nenabled: true\nR_GE_S_ALL_POLYGONS_WRONG_ORIENTATION:\nenabled: true\nR_GE_S_NON_MANIFOLD_VERTEX:\nenabled: true\nR_GE_S_SELF_INTERSECTION:\nenabled: true\nR_SE_BS_IS_WALL:\nenabled: false\nparameters:\nlowerAngle: '45'\nupperAngle: '135'\nR_SE_BS_IS_FLOOR:\nenabled: false\nR_SE_BS_GROUND_UNFRAGMENTED:\nenabled: false\nR_SE_BS_IS_GROUND:\nenabled: false\nR_SE_BS_IS_CEILING:\nenabled: false\n</code></pre></p> <ol> <li>Der Parameter <code>useStreaming</code> ist ein Schalter um eine Datei St\u00fcck f\u00fcr St\u00fcck einzulesen anstelle erst die komplette Datei zu lesen bevor die Pr\u00fcfung stattfindet. Mit dieser Einstellung k\u00f6nnen auch Dateien &gt; 2GB ohne gro\u00dfe RAM Anforderungen gepr\u00fcft werden.</li> </ol> <p>In dem Validierungsplan finden sich die selben Einstellungen wieder, die in der grafischen Oberfl\u00e4che auch aufgelistet sind.</p> <p>Unter requirements sind alle Anforderungen gelistet die gepr\u00fcft werden sollen. Dabei sind die semantischen Pr\u00fcfungen standardm\u00e4\u00dfig deaktiviert. </p>"}]}
\ No newline at end of file
<!doctype html>
<html lang="de" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="prev" href="../geometric/">
<link rel="next" href="../R_GE_R_TOO_FEW_POINTS/">
<link rel="icon" href="../img/citydoctor_logo.png">
<meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.0.6">
<title>Semantische Anforderungen - CityDoctor2</title>
<link rel="stylesheet" href="../assets/stylesheets/main.558e4712.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.2505c338.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="https://unpkg.com/mermaid/dist/mermaid.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="red" data-md-color-accent="">
<script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#semantische-anforderungen" class="md-skip">
Zum Inhalt
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Kopfzeile">
<a href=".." title="CityDoctor2" class="md-header__button md-logo" aria-label="CityDoctor2" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
CityDoctor2
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Semantische Anforderungen
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="red" data-md-color-accent="" aria-label="Dunkelmodus verwenden" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Dunkelmodus verwenden" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="" data-md-color-accent="" aria-label="Hellen Modus verwenden" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Hellen Modus verwenden" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
</form>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Suche" placeholder="Suche" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Suche">
<button type="reset" class="md-search__icon md-icon" title="Zurücksetzen" aria-label="Zurücksetzen" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Suche wird initialisiert
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="CityDoctor2" class="md-nav__button md-logo" aria-label="CityDoctor2" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
CityDoctor2
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
CityDoctor2
</a>
</li>
<li class="md-nav__item">
<a href="../requiredSoftware/" class="md-nav__link">
Installation
</a>
</li>
<li class="md-nav__item">
<a href="../firstRun/" class="md-nav__link">
Erster Start
</a>
</li>
<li class="md-nav__item">
<a href="../userInterface/" class="md-nav__link">
Nutzeroberfläche
</a>
</li>
<li class="md-nav__item">
<a href="../validationPlan/" class="md-nav__link">
Prüfplan
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_6" type="checkbox" id="__nav_6" checked>
<label class="md-nav__link" for="__nav_6" tabindex="0" aria-expanded="true">
Anforderungen
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Anforderungen" data-md-level="1">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Anforderungen
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../basic/" class="md-nav__link">
Grundbegriffe
</a>
</li>
<li class="md-nav__item">
<a href="../requirements/" class="md-nav__link">
Übersicht
</a>
</li>
<li class="md-nav__item">
<a href="../schemaRequirements/" class="md-nav__link">
Schemaanforderungen
</a>
</li>
<li class="md-nav__item">
<a href="../geometric/" class="md-nav__link">
Geometrische Anforderungen
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
Semantische Anforderungen
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
Semantische Anforderungen
</a>
<nav class="md-nav md-nav--secondary" aria-label="Inhaltsverzeichnis">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Inhaltsverzeichnis
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#schematron" class="md-nav__link">
Schematron
</a>
<nav class="md-nav" aria-label="Schematron">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#fehlerformat" class="md-nav__link">
Fehlerformat
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_6_6" type="checkbox" id="__nav_6_6" >
<label class="md-nav__link" for="__nav_6_6" tabindex="0" aria-expanded="false">
Details
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Details" data-md-level="2">
<label class="md-nav__title" for="__nav_6_6">
<span class="md-nav__icon md-icon"></span>
Details
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../R_GE_R_TOO_FEW_POINTS/" class="md-nav__link">
R_TOO_FEW_POINTS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_CONSECUTIVE_POINTS_SAME/" class="md-nav__link">
R_CONSECUTIVE_POINTS_SAME
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_NOT_CLOSED/" class="md-nav__link">
R_RING_NOT_CLOSED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_SELF_INTERSECTION/" class="md-nav__link">
R_RING_SELF_INTERSECTION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_COLLAPSED_TO_LINE/" class="md-nav__link">
R_COLLAPSED_TO_LINE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INTERSECTING_RINGS/" class="md-nav__link">
P_INTERSECTING_RINGS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_NON_PLANAR/" class="md-nav__link">
P_NON_PLANAR
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INTERIOR_DISCONNECTED/" class="md-nav__link">
P_INTERIOR_DISCONNECTED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_HOLE_OUTSIDE/" class="md-nav__link">
P_HOLE_OUTSIDE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INNER_RINGS_NESTED/" class="md-nav__link">
P_INNER_RINGS_NESTED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_ORIENTATION_RINGS_SAME/" class="md-nav__link">
P_ORIENTATION_RINGS_SAME
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_MS/" class="md-nav__link">
MULTI_SURFACE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_TOO_FEW_POLYGONS/" class="md-nav__link">
S_TOO_FEW_POLYGONS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NOT_CLOSED/" class="md-nav__link">
S_NOT_CLOSED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NON_MANIFOLD_VERTEX/" class="md-nav__link">
S_NON_MANIFOLD_VERTEX
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NON_MANIFOLD_EDGE/" class="md-nav__link">
S_NON_MANIFOLD_EDGE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_MULTIPLE_CONNECTED_COMPONENTS/" class="md-nav__link">
S_MULTIPLE_CONNECTED_COMPONENTS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_SELF_INTERSECTION/" class="md-nav__link">
S_SELF_INTERSECTION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_POLYGON_WRONG_ORIENTATION/" class="md-nav__link">
S_POLYGON_WRONG_ORIENTATION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION/" class="md-nav__link">
S_ALL_POLYGONS_WRONG_ORIENTATION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_SO/" class="md-nav__link">
SOLID
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Inhaltsverzeichnis">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Inhaltsverzeichnis
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#schematron" class="md-nav__link">
Schematron
</a>
<nav class="md-nav" aria-label="Schematron">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#fehlerformat" class="md-nav__link">
Fehlerformat
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="semantische-anforderungen">Semantische Anforderungen<a class="headerlink" href="#semantische-anforderungen" title="Permanent link">&para;</a></h1>
<p>Die semantischen Anforderungen sind meistens auf Attributbasis. Daraus ergeben sich 3 Fehlerzustände für ein Attribut:</p>
<ul>
<li><strong>SE_ATTRIBUTE_WRONG_VALUE:</strong> Wenn ein Attribut ein falschen Wert hat.</li>
<li><strong>SE_ATTRIBUTE_MISSING:</strong> Wenn ein Attribut fehlt, aber vorhanden sein sollte.</li>
<li><strong>SE_ATTRIBUTE_INVALID:</strong> Wenn ein Attribut vorhanden ist aber verboten ist.</li>
</ul>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p><strong>SE_ATTRIBUTE_INVALID:</strong> ist noch nicht in CityDoctor und der QualityADE umgesetzt ist aber geplant in einer neuen Version zu unterstützen.</p>
</div>
<h2 id="schematron">Schematron<a class="headerlink" href="#schematron" title="Permanent link">&para;</a></h2>
<p>In CityDoctor wurde das <a href="https://de.wikipedia.org/wiki/Schematron">XML Validierungssystem Schematron</a> integriert um flexibel Attributprüfungen anzupassen und zu unterstützen. </p>
<p>Hier ist ein Beispiel für eine Schematron Datei die CityDoctor integrieren kann:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="cp">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="nt">&lt;schema</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">&quot;http://purl.oclc.org/dsdl/schematron&quot;</span><span class="w"> </span><span class="na">queryBinding=</span><span class="s">&quot;xslt2&quot;</span><span class="nt">&gt;</span>
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="w"> </span><span class="nt">&lt;ns</span><span class="w"> </span><span class="na">prefix=</span><span class="s">&quot;gml&quot;</span><span class="w"> </span><span class="na">uri=</span><span class="s">&quot;http://www.opengis.net/gml&quot;</span><span class="nt">/&gt;</span>
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="w"> </span><span class="nt">&lt;ns</span><span class="w"> </span><span class="na">prefix=</span><span class="s">&quot;bldg&quot;</span><span class="w"> </span><span class="na">uri=</span><span class="s">&quot;http://www.opengis.net/citygml/building/2.0&quot;</span><span class="nt">/&gt;</span>
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a>
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="w"> </span><span class="nt">&lt;pattern&gt;</span>
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="w"> </span><span class="nt">&lt;rule</span><span class="w"> </span><span class="na">context=</span><span class="s">&quot;//*:Building&quot;</span><span class="nt">&gt;</span>
<a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="w"> </span><span class="nt">&lt;assert</span><span class="w"> </span><span class="na">test=</span><span class="s">&quot;count(descendant::*:lod1Solid) &amp;gt; 0 or count(descendant::*:lod2Solid) &amp;gt; 0 or count(descendant::*:lod3Solid) &amp;gt; 0 or count(descendant::*:lod4Solid) &amp;gt; 0&quot;</span><span class="nt">&gt;&lt;value-of</span><span class="w"> </span><span class="na">select=</span><span class="s">&quot;@gml:id | @id&quot;</span><span class="nt">/&gt;</span>||||SE_ATTRIBUTE_MISSING||any<span class="w"> </span>solid||false<span class="nt">&lt;/assert&gt;</span>
<a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="w"> </span><span class="nt">&lt;/rule&gt;</span>
<a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a><span class="w"> </span><span class="nt">&lt;rule</span><span class="w"> </span><span class="na">context=</span><span class="s">&quot;//*:BuildingPart&quot;</span><span class="nt">&gt;</span>
<a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a><span class="w"> </span><span class="nt">&lt;assert</span><span class="w"> </span><span class="na">test=</span><span class="s">&quot;count(*:lod1Solid) = 1 or count(*:lod2Solid) = 1 or count(*:lod3Solid) = 1 or count(*:lod4Solid) = 1&quot;</span><span class="nt">&gt;&lt;value-of</span><span class="w"> </span><span class="na">select=</span><span class="s">&quot;ancestor::*:Building/@*:id&quot;</span><span class="nt">/&gt;</span>||<span class="nt">&lt;value-of</span><span class="w"> </span><span class="na">select=</span><span class="s">&quot;@gml:id | @id&quot;</span><span class="nt">/&gt;</span>||SE_ATTRIBUTE_MISSING||any<span class="w"> </span>solid||false<span class="nt">&lt;/assert&gt;</span>
<a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a><span class="w"> </span><span class="nt">&lt;/rule&gt;</span>
<a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a><span class="w"> </span><span class="nt">&lt;/pattern&gt;</span>
<a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a><span class="nt">&lt;/schema&gt;</span><span class="w"> </span>
</code></pre></div>
<p>Diese Datei prüft, dass alle Buildings in sich selbst oder in einem ihrer Unterelementen ein Solid beliebigen LODSs vorhanden ist. Außerdem stellt die Datei sicher, dass jedes BuildingPart ein Solid enthält. Wenn dies nicht der Fall ist wird eine Fehlermeldung ausgegeben. Die Fehlermeldung ist dabei so formattiert, dass CityDoctor sie interpretieren und in das interne Datenmodell einbinden kann.</p>
<h3 id="fehlerformat">Fehlerformat<a class="headerlink" href="#fehlerformat" title="Permanent link">&para;</a></h3>
<p>Das Fehlerformat ist ein CSV-Format mit || als Trennzeichen</p>
<p><div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>parent id||child id||error code||error type||is generic attribute
</code></pre></div>
Die Fehlermeldung besteht aus den folgenden Teilen:</p>
<ul>
<li>Die <code>parent id</code> ist die gml id des obersten Elements z.B. Building oder Bridge. </li>
<li>Falls der Fehler in einem Unterelement aufgetreten ist so kann diese ID in dem Feld für die <code>child id</code> eingetragen werden.</li>
<li>Im Feld <code>error type</code> ist einer der 3 Fehlertypen einzutragen: <code>SE_ATTRIBUTE_WRONG_VALUE, SE_ATTRIBUTE_MISSING, SE_ATTRIBUTE_INVALID</code>.</li>
<li>Um ein generisches Attribut mit dem Namen <code>measuredHeight</code> von dem nicht generischen Attribut zu unterscheiden ist im letzten Feld vorgesehen <code>true</code> einzutragen wenn es sich um ein generisches Attribut handelt ansonsten <code>false</code>. </li>
</ul>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["content.code.annotate"], "search": "../assets/javascripts/workers/search.e5c33ebb.min.js", "translations": {"clipboard.copied": "In Zwischenablage kopiert", "clipboard.copy": "In Zwischenablage kopieren", "search.result.more.one": "1 weiteres Suchergebnis auf dieser Seite", "search.result.more.other": "# weitere Suchergebnisse auf dieser Seite", "search.result.none": "Keine Suchergebnisse", "search.result.one": "1 Suchergebnis", "search.result.other": "# Suchergebnisse", "search.result.placeholder": "Suchbegriff eingeben", "search.result.term.missing": "Es fehlt", "select.version": "Version ausw\u00e4hlen"}}</script>
<script src="../assets/javascripts/bundle.51d95adb.min.js"></script>
<script src="https://unpkg.com/mermaid/dist/mermaid.min.js"></script>
</body>
</html>
\ No newline at end of file
//TODO Projektnamen setzen:
let projektname= ""
// TODO Link zur Projektseite setzen
let projektseitenlink= ""
// TODO URL zum Projektlogo setzen
let projektlogourl = ""
// KEINE ÄNDERUNG NACH DIESER ZEILE!
let menu = document.getElementById("menu");
//link1: home
let homelink = document.createElement("a");
homelink.href="index.html"
homelink.innerHTML="Home"
menu.appendChild(homelink);
//link2: projektseite
let projectlink = document.createElement("a");
projectlink.href=projektseitenlink
projectlink.innerHTML="Projekt"
menu.appendChild(projectlink);
//link3: aktuelles
let newslink = document.createElement("a");
newslink.href="aktuelles.html"
newslink.innerHTML="Aktuelles"
menu.appendChild(newslink);
//link4: Kontakt
let contactlink = document.createElement("a");
contactlink.href="kontakt.html"
contactlink.innerHTML="Kontakt"
menu.appendChild(contactlink);
//set projectname
document.getElementById("projectname").innerHTML=projektname;
let hftlogo = document.createElement("a");
let topbar = document.getElementById("topbar");
hftlogo.href = "https://hft-stuttgart.de";
hftlogo.innerHTML="<img src='https://www.hft-stuttgart.de/typo3conf/ext/hft_sitepackage/Resources/Public/img/HFT_logo.svg'/>";
topbar.insertBefore(hftlogo,menu);
if(projektlogourl != ""){
let projectlogo = document.createElement("a");
projectlogo.href=projektseitenlink;
projectlogo.innerHTML="<img src='" + projektlogourl + "'/>";
topbar.insertBefore(projectlogo,menu);
}
//footer: add logo innovatice Hochschule
let bmbf = document.createElement('div');
bmbf.innerHTML = "<img src='https://transfer.hft-stuttgart.de/img/footer/Innovative_Hochschule_Initiative_BMBF_GWK_RGB.png' alt='Innovative Hochschule' style='height:90px'/>"
document.body.appendChild(bmbf);
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>None</loc>
<lastmod>2023-02-02</lastmod>
<changefreq>daily</changefreq>
</url>
</urlset>
\ No newline at end of file
body {
font-family: sans-serif;
margin: auto;
max-width: 1280px;
margin-left:2%;
margin-right:2%;
}
.navbar {
background-color: #cc3125;
border-radius: 2px;
/* max-width: 800px; */
}
.navbar a {
color: #aaa;
display: inline-block;
font-size: 15px;
padding: 10px;
text-decoration: none;
}
.navbar a:hover {
color: #ffffff;
}
#topbar img{
max-width:15%;
margin-right:20px;
}
.content{
margin-left:2%;
margin-right:2%;
}
.header{
font-weight: bold;
}
.news{
background-color: #f5f5f5;
margin-bottom: 20px;
padding-top:10px;
padding-bottom: 10px;
}
<!doctype html>
<html lang="de" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="prev" href="../firstRun/">
<link rel="next" href="../validationPlan/">
<link rel="icon" href="../img/citydoctor_logo.png">
<meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.0.6">
<title>Nutzeroberfläche - CityDoctor2</title>
<link rel="stylesheet" href="../assets/stylesheets/main.558e4712.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.2505c338.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="https://unpkg.com/mermaid/dist/mermaid.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="red" data-md-color-accent="">
<script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#nutzeroberflache" class="md-skip">
Zum Inhalt
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Kopfzeile">
<a href=".." title="CityDoctor2" class="md-header__button md-logo" aria-label="CityDoctor2" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
CityDoctor2
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Nutzeroberfläche
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="red" data-md-color-accent="" aria-label="Dunkelmodus verwenden" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Dunkelmodus verwenden" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="" data-md-color-accent="" aria-label="Hellen Modus verwenden" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Hellen Modus verwenden" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
</form>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Suche" placeholder="Suche" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Suche">
<button type="reset" class="md-search__icon md-icon" title="Zurücksetzen" aria-label="Zurücksetzen" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Suche wird initialisiert
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="CityDoctor2" class="md-nav__button md-logo" aria-label="CityDoctor2" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
CityDoctor2
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
CityDoctor2
</a>
</li>
<li class="md-nav__item">
<a href="../requiredSoftware/" class="md-nav__link">
Installation
</a>
</li>
<li class="md-nav__item">
<a href="../firstRun/" class="md-nav__link">
Erster Start
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
Nutzeroberfläche
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
Nutzeroberfläche
</a>
<nav class="md-nav md-nav--secondary" aria-label="Inhaltsverzeichnis">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Inhaltsverzeichnis
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#citydoctor" class="md-nav__link">
CityDoctor
</a>
</li>
<li class="md-nav__item">
<a href="#laden" class="md-nav__link">
Laden
</a>
</li>
<li class="md-nav__item">
<a href="#prufen" class="md-nav__link">
Prüfen
</a>
</li>
<li class="md-nav__item">
<a href="#prufberichte" class="md-nav__link">
Prüfberichte
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../validationPlan/" class="md-nav__link">
Prüfplan
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_6" type="checkbox" id="__nav_6" >
<label class="md-nav__link" for="__nav_6" tabindex="0" aria-expanded="false">
Anforderungen
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Anforderungen" data-md-level="1">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Anforderungen
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../basic/" class="md-nav__link">
Grundbegriffe
</a>
</li>
<li class="md-nav__item">
<a href="../requirements/" class="md-nav__link">
Übersicht
</a>
</li>
<li class="md-nav__item">
<a href="../schemaRequirements/" class="md-nav__link">
Schemaanforderungen
</a>
</li>
<li class="md-nav__item">
<a href="../geometric/" class="md-nav__link">
Geometrische Anforderungen
</a>
</li>
<li class="md-nav__item">
<a href="../semantic/" class="md-nav__link">
Semantische Anforderungen
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_6_6" type="checkbox" id="__nav_6_6" >
<label class="md-nav__link" for="__nav_6_6" tabindex="0" aria-expanded="false">
Details
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Details" data-md-level="2">
<label class="md-nav__title" for="__nav_6_6">
<span class="md-nav__icon md-icon"></span>
Details
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../R_GE_R_TOO_FEW_POINTS/" class="md-nav__link">
R_TOO_FEW_POINTS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_CONSECUTIVE_POINTS_SAME/" class="md-nav__link">
R_CONSECUTIVE_POINTS_SAME
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_NOT_CLOSED/" class="md-nav__link">
R_RING_NOT_CLOSED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_SELF_INTERSECTION/" class="md-nav__link">
R_RING_SELF_INTERSECTION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_COLLAPSED_TO_LINE/" class="md-nav__link">
R_COLLAPSED_TO_LINE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INTERSECTING_RINGS/" class="md-nav__link">
P_INTERSECTING_RINGS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_NON_PLANAR/" class="md-nav__link">
P_NON_PLANAR
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INTERIOR_DISCONNECTED/" class="md-nav__link">
P_INTERIOR_DISCONNECTED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_HOLE_OUTSIDE/" class="md-nav__link">
P_HOLE_OUTSIDE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INNER_RINGS_NESTED/" class="md-nav__link">
P_INNER_RINGS_NESTED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_ORIENTATION_RINGS_SAME/" class="md-nav__link">
P_ORIENTATION_RINGS_SAME
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_MS/" class="md-nav__link">
MULTI_SURFACE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_TOO_FEW_POLYGONS/" class="md-nav__link">
S_TOO_FEW_POLYGONS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NOT_CLOSED/" class="md-nav__link">
S_NOT_CLOSED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NON_MANIFOLD_VERTEX/" class="md-nav__link">
S_NON_MANIFOLD_VERTEX
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NON_MANIFOLD_EDGE/" class="md-nav__link">
S_NON_MANIFOLD_EDGE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_MULTIPLE_CONNECTED_COMPONENTS/" class="md-nav__link">
S_MULTIPLE_CONNECTED_COMPONENTS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_SELF_INTERSECTION/" class="md-nav__link">
S_SELF_INTERSECTION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_POLYGON_WRONG_ORIENTATION/" class="md-nav__link">
S_POLYGON_WRONG_ORIENTATION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION/" class="md-nav__link">
S_ALL_POLYGONS_WRONG_ORIENTATION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_SO/" class="md-nav__link">
SOLID
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Inhaltsverzeichnis">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Inhaltsverzeichnis
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#citydoctor" class="md-nav__link">
CityDoctor
</a>
</li>
<li class="md-nav__item">
<a href="#laden" class="md-nav__link">
Laden
</a>
</li>
<li class="md-nav__item">
<a href="#prufen" class="md-nav__link">
Prüfen
</a>
</li>
<li class="md-nav__item">
<a href="#prufberichte" class="md-nav__link">
Prüfberichte
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="nutzeroberflache">Nutzeroberfläche<a class="headerlink" href="#nutzeroberflache" title="Permanent link">&para;</a></h1>
<h2 id="citydoctor">CityDoctor<a class="headerlink" href="#citydoctor" title="Permanent link">&para;</a></h2>
<p><img alt="interface" src="../img/userInterface.png" /></p>
<p>In der oberen Leiste sind folgende Schaltflächen in Reihenfolge:</p>
<ul>
<li><strong>Laden:</strong> Öffnet den Dialog zum laden einer CityGML Datei</li>
<li><strong>Prüfen:</strong> Öffnet den Dialog zum prüfen einer geladenen CityGML</li>
<li><strong>Prüfberichte:</strong> Öffnet den Dialog zum schreiben eines Prüfprotokolls in xml oder pdf Form</li>
<li><strong>Gitternetz:</strong> Zeigt/Versteckt das Gitternetz anstatt gefüllter Polygone</li>
<li><strong>Rückseiten:</strong> Zeigt/Versteckt Rückseiten von Polygonen</li>
<li><strong>Globale Ansicht:</strong> Lädt alle Elemente einer CityGML in die Ansicht</li>
<li><strong>LODs:</strong> Schaltet einzelne LODs von der Ansicht an oder aus</li>
<li><strong>Speichern:</strong> Speichert eine CityGML Datei zurück, falls die Datei geprüft wurde wird die QualityADE mitgeschrieben.</li>
<li><strong>About:</strong> Öffnet den Dialog mit Informationen zu dem Projekt CityDoctor2</li>
<li><strong>Ansichten:</strong> Wechselt verschiedene Ansichten. Für die Prüfung gibt es nur eine.</li>
<li><strong>Sprache:</strong> Hier kann die Sprache eingestellt werden (Deutsch/Englisch)</li>
</ul>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Das Anzeigen der Globalen Ansicht kann bei großen CityGML Dateien (&gt; 100mb je nach System) zu abstürzen führen. Das Anzeigen kann kurz dauern.</p>
</div>
<h2 id="laden">Laden<a class="headerlink" href="#laden" title="Permanent link">&para;</a></h2>
<p>Über die Schaltfläche Laden wird der Dialog zum laden einer CityGML Datei geöffnet.</p>
<p><img alt="open" src="../img/open.png" /></p>
<p>In der Datei Leiste kann ein Dateipfad eingetragen werden oder über die Schaltfläche <strong>Auswählen</strong> ausgewählt werden.</p>
<p>Außerdem können weitere Einstellungen für das Lesen der Datei angegeben werden.</p>
<ul>
<li><strong>NumberOfRoundingPlaces:</strong> Auf wie viele Nachkommastellen werden die eingelesenen Werte gerundet.</li>
<li><strong>XML-Validierung:</strong> Führt eine XML Validierung durch. Fehler werden dabei direkt beim einlesen festgestellt und das Einlesen wird abgebrochen.</li>
<li><strong>Speicherverbrauch:</strong> Spart RAM um größere Dateien in der GUI zu ermöglichen. Kostet geringfügig Performance bei der Prüfung.</li>
</ul>
<p>Beim Laden wird der Fortschritt ungefähr durch den Ladebalken repräsentiert.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Dateien können auch direkt per Drag and Drop vom Dateimanager in die GUI gezogen werden ohne den Laden Dialog zu verwenden. Dabei werden die Default Werte angenommen (8 Nachkommastellen, keine XML-Validierung)</p>
</div>
<p>Nach dem Laden einer CityGML Datei werden die Elemente in den einzelnen Tabs angezeigt. Durch auswählen eines Elements wird das in der Ansicht angezeigt.</p>
<p><img alt="loadedFile" src="../img/interfaceLoad.png" /></p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Durch Auswählen des obersten Elements eines Reiters werden alle Elemente innerhalb diese Reiters angezeigt. Wie obige Warnung schon besagt, gilt auch hier, dass größere Datenmengen zu Abstürzen führen.</p>
</div>
<h2 id="prufen">Prüfen<a class="headerlink" href="#prufen" title="Permanent link">&para;</a></h2>
<p><img alt="checkDialog" src="../img/checkDialog.png" /></p>
<p>Im Prüfdialog kann der Validierungsplan angepasst werden. Hier werden neben den Verfügbaren Prüfungen auch die globalen Parameter angezeigt.</p>
<p>Verändert können die Parameter mit einem Doppelklick in die Wert Spalte. Die Einheit ist dabei fest.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Der Parameter numberOfRoundingPlaces kann nicht verändert werden. Er wurde beim Laden der Datei festgelegt.</p>
</div>
<p>Falls Prüfungen nicht ausgeführt werden sollen können sie in der Spalte Aktiv deaktiviert werden.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Wenn Prüfungen deaktiviert wurden die andere aktiven Prüfungen aber als Abhängigkeit benötigen werden sie bei der Prüfung wieder aktiviert um die Stabilität zu gewährleisten. Siehe <a href="../requirements/">Anforderungen</a>.</p>
</div>
<p>In dem Feld Schematron Datei kann ein Pfad zu einer Schematron Datei eingetragen werden. In dieser Datei können flexible Regeln für die semantischen Anforderungen festgelegt werden. Siehe <a href="../semantic/">Semantische Prüfungen</a></p>
<p>Über die beiden Schaltflächen oben rechts kann der Prüfplan gespeichert und geladen werden.</p>
<p>Nach der Prüfung werden fehlerhafte Elemente rot und fehlerfreie Elemente grün eingefärbt. Bei der Auswahl eines Elements das fehler beinhaltet werden die Fehler in dem unteren Tab <strong>Fehler</strong> angezeigt. Dort kann der Fehler ausgewählt werden um ihn in CityDoctor anzuzeigen und weitere Informationen zu erhalten.</p>
<p><img alt="checked" src="../img/checked.png" /></p>
<p>Die Elemente können mit dem Dropdown-Menü gefiltert werden um nur fehlerhafte Elemente anzuzeigen.</p>
<h2 id="prufberichte">Prüfberichte<a class="headerlink" href="#prufberichte" title="Permanent link">&para;</a></h2>
<p>In diesem Dialog gibt es nochmal eine Übersicht über die Fehler in Bildform und die Möglichkeit einen xml oder pdf Bericht zu schreiben.</p>
<p><img alt="reportDialog" src="../img/reportDialog.png" /></p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["content.code.annotate"], "search": "../assets/javascripts/workers/search.e5c33ebb.min.js", "translations": {"clipboard.copied": "In Zwischenablage kopiert", "clipboard.copy": "In Zwischenablage kopieren", "search.result.more.one": "1 weiteres Suchergebnis auf dieser Seite", "search.result.more.other": "# weitere Suchergebnisse auf dieser Seite", "search.result.none": "Keine Suchergebnisse", "search.result.one": "1 Suchergebnis", "search.result.other": "# Suchergebnisse", "search.result.placeholder": "Suchbegriff eingeben", "search.result.term.missing": "Es fehlt", "select.version": "Version ausw\u00e4hlen"}}</script>
<script src="../assets/javascripts/bundle.51d95adb.min.js"></script>
<script src="https://unpkg.com/mermaid/dist/mermaid.min.js"></script>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html lang="de" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="prev" href="../userInterface/">
<link rel="next" href="../basic/">
<link rel="icon" href="../img/citydoctor_logo.png">
<meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.0.6">
<title>Prüfplan - CityDoctor2</title>
<link rel="stylesheet" href="../assets/stylesheets/main.558e4712.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.2505c338.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="https://unpkg.com/mermaid/dist/mermaid.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="red" data-md-color-accent="">
<script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#validierungsplan" class="md-skip">
Zum Inhalt
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Kopfzeile">
<a href=".." title="CityDoctor2" class="md-header__button md-logo" aria-label="CityDoctor2" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
CityDoctor2
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Prüfplan
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="red" data-md-color-accent="" aria-label="Dunkelmodus verwenden" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Dunkelmodus verwenden" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="" data-md-color-accent="" aria-label="Hellen Modus verwenden" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Hellen Modus verwenden" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
</form>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Suche" placeholder="Suche" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Suche">
<button type="reset" class="md-search__icon md-icon" title="Zurücksetzen" aria-label="Zurücksetzen" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Suche wird initialisiert
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="CityDoctor2" class="md-nav__button md-logo" aria-label="CityDoctor2" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
CityDoctor2
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
CityDoctor2
</a>
</li>
<li class="md-nav__item">
<a href="../requiredSoftware/" class="md-nav__link">
Installation
</a>
</li>
<li class="md-nav__item">
<a href="../firstRun/" class="md-nav__link">
Erster Start
</a>
</li>
<li class="md-nav__item">
<a href="../userInterface/" class="md-nav__link">
Nutzeroberfläche
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active">
Prüfplan
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_6" type="checkbox" id="__nav_6" >
<label class="md-nav__link" for="__nav_6" tabindex="0" aria-expanded="false">
Anforderungen
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Anforderungen" data-md-level="1">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Anforderungen
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../basic/" class="md-nav__link">
Grundbegriffe
</a>
</li>
<li class="md-nav__item">
<a href="../requirements/" class="md-nav__link">
Übersicht
</a>
</li>
<li class="md-nav__item">
<a href="../schemaRequirements/" class="md-nav__link">
Schemaanforderungen
</a>
</li>
<li class="md-nav__item">
<a href="../geometric/" class="md-nav__link">
Geometrische Anforderungen
</a>
</li>
<li class="md-nav__item">
<a href="../semantic/" class="md-nav__link">
Semantische Anforderungen
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_6_6" type="checkbox" id="__nav_6_6" >
<label class="md-nav__link" for="__nav_6_6" tabindex="0" aria-expanded="false">
Details
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Details" data-md-level="2">
<label class="md-nav__title" for="__nav_6_6">
<span class="md-nav__icon md-icon"></span>
Details
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../R_GE_R_TOO_FEW_POINTS/" class="md-nav__link">
R_TOO_FEW_POINTS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_CONSECUTIVE_POINTS_SAME/" class="md-nav__link">
R_CONSECUTIVE_POINTS_SAME
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_NOT_CLOSED/" class="md-nav__link">
R_RING_NOT_CLOSED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_SELF_INTERSECTION/" class="md-nav__link">
R_RING_SELF_INTERSECTION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_R_COLLAPSED_TO_LINE/" class="md-nav__link">
R_COLLAPSED_TO_LINE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INTERSECTING_RINGS/" class="md-nav__link">
P_INTERSECTING_RINGS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_NON_PLANAR/" class="md-nav__link">
P_NON_PLANAR
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INTERIOR_DISCONNECTED/" class="md-nav__link">
P_INTERIOR_DISCONNECTED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_HOLE_OUTSIDE/" class="md-nav__link">
P_HOLE_OUTSIDE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_INNER_RINGS_NESTED/" class="md-nav__link">
P_INNER_RINGS_NESTED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_P_ORIENTATION_RINGS_SAME/" class="md-nav__link">
P_ORIENTATION_RINGS_SAME
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_MS/" class="md-nav__link">
MULTI_SURFACE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_TOO_FEW_POLYGONS/" class="md-nav__link">
S_TOO_FEW_POLYGONS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NOT_CLOSED/" class="md-nav__link">
S_NOT_CLOSED
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NON_MANIFOLD_VERTEX/" class="md-nav__link">
S_NON_MANIFOLD_VERTEX
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_NON_MANIFOLD_EDGE/" class="md-nav__link">
S_NON_MANIFOLD_EDGE
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_MULTIPLE_CONNECTED_COMPONENTS/" class="md-nav__link">
S_MULTIPLE_CONNECTED_COMPONENTS
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_SELF_INTERSECTION/" class="md-nav__link">
S_SELF_INTERSECTION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_POLYGON_WRONG_ORIENTATION/" class="md-nav__link">
S_POLYGON_WRONG_ORIENTATION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION/" class="md-nav__link">
S_ALL_POLYGONS_WRONG_ORIENTATION
</a>
</li>
<li class="md-nav__item">
<a href="../R_GE_SO/" class="md-nav__link">
SOLID
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Inhaltsverzeichnis">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="validierungsplan">Validierungsplan<a class="headerlink" href="#validierungsplan" title="Permanent link">&para;</a></h1>
<p>der Validierungsplan für CityDoctor wird in <a href="https://de.wikipedia.org/wiki/YAML">YAML</a> angegeben.</p>
<p>Für die Version 3.12.x sieht ein Beispiel so aus:
<div class="annotate highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nt">globalParameters</span><span class="p">:</span>
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="w"> </span><span class="nt">numberOfRoundingPlaces</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">8</span>
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="w"> </span><span class="c1"># in m</span>
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="w"> </span><span class="nt">minVertexDistance</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">0.0001</span>
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="w"> </span><span class="nt">schematronPath</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;checkForSolid.xml&#39;</span>
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="nt">useStreaming</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span><span class="w"> </span><span class="c1"># (1)!</span>
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="nt">requirements</span><span class="p">:</span>
<a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="w"> </span><span class="nt">R_GE_R_TOO_FEW_POINTS</span><span class="p">:</span>
<a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a><span class="w"> </span><span class="nt">R_GE_R_NOT_CLOSED</span><span class="p">:</span>
<a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a><span class="w"> </span><span class="nt">R_GE_R_CONSECUTIVE_POINTS_SAME</span><span class="p">:</span>
<a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a><span class="w"> </span><span class="nt">R_GE_R_SELF_INTERSECTION</span><span class="p">:</span>
<a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a><span class="w"> </span><span class="nt">R_GE_S_MULTIPLE_CONNECTED_COMPONENTS</span><span class="p">:</span>
<a id="__codelineno-0-17" name="__codelineno-0-17" href="#__codelineno-0-17"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-18" name="__codelineno-0-18" href="#__codelineno-0-18"></a><span class="w"> </span><span class="nt">R_GE_P_INTERIOR_DISCONNECTED</span><span class="p">:</span>
<a id="__codelineno-0-19" name="__codelineno-0-19" href="#__codelineno-0-19"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-20" name="__codelineno-0-20" href="#__codelineno-0-20"></a><span class="w"> </span><span class="nt">R_GE_P_INTERSECTING_RINGS</span><span class="p">:</span>
<a id="__codelineno-0-21" name="__codelineno-0-21" href="#__codelineno-0-21"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-22" name="__codelineno-0-22" href="#__codelineno-0-22"></a><span class="w"> </span><span class="nt">R_GE_P_NON_PLANAR</span><span class="p">:</span>
<a id="__codelineno-0-23" name="__codelineno-0-23" href="#__codelineno-0-23"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-24" name="__codelineno-0-24" href="#__codelineno-0-24"></a><span class="w"> </span><span class="nt">parameters</span><span class="p">:</span>
<a id="__codelineno-0-25" name="__codelineno-0-25" href="#__codelineno-0-25"></a><span class="w"> </span><span class="c1"># one of (&quot;distance&quot;, &quot;angle&quot;, &quot;both&quot;)</span>
<a id="__codelineno-0-26" name="__codelineno-0-26" href="#__codelineno-0-26"></a><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">distance</span>
<a id="__codelineno-0-27" name="__codelineno-0-27" href="#__codelineno-0-27"></a><span class="w"> </span><span class="c1"># in m</span>
<a id="__codelineno-0-28" name="__codelineno-0-28" href="#__codelineno-0-28"></a><span class="w"> </span><span class="nt">distanceTolerance</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">0.01</span>
<a id="__codelineno-0-29" name="__codelineno-0-29" href="#__codelineno-0-29"></a><span class="w"> </span><span class="c1"># in degree</span>
<a id="__codelineno-0-30" name="__codelineno-0-30" href="#__codelineno-0-30"></a><span class="w"> </span><span class="nt">angleTolerance</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">1</span>
<a id="__codelineno-0-31" name="__codelineno-0-31" href="#__codelineno-0-31"></a><span class="w"> </span><span class="nt">R_GE_P_HOLE_OUTSIDE</span><span class="p">:</span>
<a id="__codelineno-0-32" name="__codelineno-0-32" href="#__codelineno-0-32"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-33" name="__codelineno-0-33" href="#__codelineno-0-33"></a><span class="w"> </span><span class="nt">R_GE_P_ORIENTATION_RINGS_SAME</span><span class="p">:</span>
<a id="__codelineno-0-34" name="__codelineno-0-34" href="#__codelineno-0-34"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-35" name="__codelineno-0-35" href="#__codelineno-0-35"></a><span class="w"> </span><span class="nt">R_GE_P_INNER_RINGS_NESTED</span><span class="p">:</span>
<a id="__codelineno-0-36" name="__codelineno-0-36" href="#__codelineno-0-36"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-37" name="__codelineno-0-37" href="#__codelineno-0-37"></a><span class="w"> </span><span class="nt">R_GE_S_TOO_FEW_POLYGONS</span><span class="p">:</span>
<a id="__codelineno-0-38" name="__codelineno-0-38" href="#__codelineno-0-38"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-39" name="__codelineno-0-39" href="#__codelineno-0-39"></a><span class="w"> </span><span class="nt">R_GE_S_NOT_CLOSED</span><span class="p">:</span>
<a id="__codelineno-0-40" name="__codelineno-0-40" href="#__codelineno-0-40"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-41" name="__codelineno-0-41" href="#__codelineno-0-41"></a><span class="w"> </span><span class="nt">R_GE_S_NON_MANIFOLD_EDGE</span><span class="p">:</span>
<a id="__codelineno-0-42" name="__codelineno-0-42" href="#__codelineno-0-42"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-43" name="__codelineno-0-43" href="#__codelineno-0-43"></a><span class="w"> </span><span class="nt">R_GE_S_POLYGON_WRONG_ORIENTATION</span><span class="p">:</span>
<a id="__codelineno-0-44" name="__codelineno-0-44" href="#__codelineno-0-44"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-45" name="__codelineno-0-45" href="#__codelineno-0-45"></a><span class="w"> </span><span class="nt">R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION</span><span class="p">:</span>
<a id="__codelineno-0-46" name="__codelineno-0-46" href="#__codelineno-0-46"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-47" name="__codelineno-0-47" href="#__codelineno-0-47"></a><span class="w"> </span><span class="nt">R_GE_S_NON_MANIFOLD_VERTEX</span><span class="p">:</span>
<a id="__codelineno-0-48" name="__codelineno-0-48" href="#__codelineno-0-48"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-49" name="__codelineno-0-49" href="#__codelineno-0-49"></a><span class="w"> </span><span class="nt">R_GE_S_SELF_INTERSECTION</span><span class="p">:</span>
<a id="__codelineno-0-50" name="__codelineno-0-50" href="#__codelineno-0-50"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<a id="__codelineno-0-51" name="__codelineno-0-51" href="#__codelineno-0-51"></a><span class="w"> </span><span class="nt">R_SE_BS_IS_WALL</span><span class="p">:</span>
<a id="__codelineno-0-52" name="__codelineno-0-52" href="#__codelineno-0-52"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">false</span>
<a id="__codelineno-0-53" name="__codelineno-0-53" href="#__codelineno-0-53"></a><span class="w"> </span><span class="nt">parameters</span><span class="p">:</span>
<a id="__codelineno-0-54" name="__codelineno-0-54" href="#__codelineno-0-54"></a><span class="w"> </span><span class="nt">lowerAngle</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;45&#39;</span>
<a id="__codelineno-0-55" name="__codelineno-0-55" href="#__codelineno-0-55"></a><span class="w"> </span><span class="nt">upperAngle</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;135&#39;</span>
<a id="__codelineno-0-56" name="__codelineno-0-56" href="#__codelineno-0-56"></a><span class="w"> </span><span class="nt">R_SE_BS_IS_FLOOR</span><span class="p">:</span>
<a id="__codelineno-0-57" name="__codelineno-0-57" href="#__codelineno-0-57"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">false</span>
<a id="__codelineno-0-58" name="__codelineno-0-58" href="#__codelineno-0-58"></a><span class="w"> </span><span class="nt">R_SE_BS_GROUND_UNFRAGMENTED</span><span class="p">:</span>
<a id="__codelineno-0-59" name="__codelineno-0-59" href="#__codelineno-0-59"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">false</span>
<a id="__codelineno-0-60" name="__codelineno-0-60" href="#__codelineno-0-60"></a><span class="w"> </span><span class="nt">R_SE_BS_IS_GROUND</span><span class="p">:</span>
<a id="__codelineno-0-61" name="__codelineno-0-61" href="#__codelineno-0-61"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">false</span>
<a id="__codelineno-0-62" name="__codelineno-0-62" href="#__codelineno-0-62"></a><span class="w"> </span><span class="nt">R_SE_BS_IS_CEILING</span><span class="p">:</span>
<a id="__codelineno-0-63" name="__codelineno-0-63" href="#__codelineno-0-63"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">false</span>
</code></pre></div></p>
<ol>
<li>Der Parameter <code>useStreaming</code> ist ein Schalter um eine Datei Stück für Stück einzulesen anstelle erst die komplette Datei zu lesen bevor die Prüfung stattfindet. Mit dieser Einstellung können auch Dateien &gt; 2GB ohne große RAM Anforderungen geprüft werden.</li>
</ol>
<p>In dem Validierungsplan finden sich die selben Einstellungen wieder, die in der grafischen Oberfläche auch aufgelistet sind.</p>
<p>Unter requirements sind alle Anforderungen gelistet die geprüft werden sollen. Dabei sind die semantischen Prüfungen standardmäßig deaktiviert. </p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["content.code.annotate"], "search": "../assets/javascripts/workers/search.e5c33ebb.min.js", "translations": {"clipboard.copied": "In Zwischenablage kopiert", "clipboard.copy": "In Zwischenablage kopieren", "search.result.more.one": "1 weiteres Suchergebnis auf dieser Seite", "search.result.more.other": "# weitere Suchergebnisse auf dieser Seite", "search.result.none": "Keine Suchergebnisse", "search.result.one": "1 Suchergebnis", "search.result.other": "# Suchergebnisse", "search.result.placeholder": "Suchbegriff eingeben", "search.result.term.missing": "Es fehlt", "select.version": "Version ausw\u00e4hlen"}}</script>
<script src="../assets/javascripts/bundle.51d95adb.min.js"></script>
<script src="https://unpkg.com/mermaid/dist/mermaid.min.js"></script>
</body>
</html>
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment